Question

Now I have the following code in the views.py:

class IndexView(generic.ListView):
    model = Question
    template_name = "qa_forum/index.html"
    context_object_name = 'question_list'
    paginate_by = 25

Its work good, but it retrieves all questions in the database (including closed and "future" questions).

In the models.py I have the following manager:

class ActiveManager(models.Manager):
    def get_query_set(self):
        return super(ActiveManager, self).get_query_set(). \
                .filter(pub_date__lte=timezone.now(), is_active=True
                ).order_by('-pub_date')

That helps to get only active question from the db.

But I don't know how to use it properly with the generic ListView.

Any advice would be greatly appreciated.

Était-ce utile?

La solution

Instead of implementing modelManager you can set the queryset on the ListView class as:

class IndexView(generic.ListView):
    model = Question
    template_name = "qa_forum/index.html"
    context_object_name = 'question_list'
    paginate_by = 25
    queryset = Question.objects.filter(pub_date__lte=timezone.now(), 
                                       is_active=True).order_by('-pub_date')

If you want to go by modelManager method, you can set queryset as

    class IndexView(generic.ListView):
        #if you have set manger as active_objects in Question model
        queryset = Question.active_objects.filter()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top