I am working on a simple "to do list" app in django (two models: List and 
Item). Trying to learn and make use of class-based generic views. I have 
the following three display views working, but am requesting a quick code 
review to see if there's anything I can do to improve my 
usage/understanding of django's ListView and DetailView before I move on to 
creating, updating and deleting. Thanks in advance for any advice.


# class-based generic views for my lists, a list's items, and item detail...
class MyListsView(ListView):
    """Display the current user's Lists"""
    template_name = 'cmv_app/my_lists.html'
    context_object_name = 'my_lists'

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(MyListsView, self).dispatch(*args, **kwargs)

    def get_queryset(self):
        return 
List.objects.filter(user=self.request.user).order_by('-last_modified')


class ListItemsView(ListView):
    """Display a list's items"""
    template_name = 'cmv_app/list_items.html'
    context_object_name = 'list_items'

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        self.list = get_object_or_404(List, pk=kwargs['list_id'])
        request = list_valid_for_user(request, self.list) # security check
        return super(ListItemsView, self).dispatch(request, *args, **kwargs)

    def get_queryset(self):
        return Item.objects.filter(list=self.list).order_by('-created_date')

    def get_context_data(self, **kwargs):
        context = super(ListItemsView, self).get_context_data(**kwargs)
        context['list'] = self.list
        return context


class ItemDetailView(DetailView):
    """Display detail for one list item"""
    template_name = 'cmv_app/item_detail.html'

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        self.list = get_object_or_404(List, pk=kwargs['list_id'])
        self.item = get_object_or_404(Item, pk=kwargs['item_id'])
        request = list_valid_for_user(request, self.list)  # security check
        request = item_valid_for_list(request, self.item, self.list)  # 
security check
        return super(ItemDetailView, self).dispatch(request, *args, 
**kwargs)

    def get_object(self):
        return self.item

    def get_context_data(self, **kwargs):
        context = super(ItemDetailView, self).get_context_data(**kwargs)
        context['list'] = self.list
        return context

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/a251fbb4-6866-410f-bd1d-19c5fff216ef%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to