Вопрос

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.

Это было полезно?

Решение

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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top