Django ListView как сделать запрос нужный мне в классе как я его делал раньше в моей функции

Я новичок в django и сделал свой первый проект, используя книгу Эрика Мэтьюса python crash course, но теперь я пытаюсь сделать это лучше и изменить функцию, которая отлично работает, на класс, но не могу понять, как сделать в классе тот же запрос, фильтруя публичные и не публичные "темы" для пользователей. Не мог бы кто-нибудь дать мне совет, как это работает в классах?

Функция, которая есть, работает отлично, а затем класс, который мне нужен, работает как эта функция:

 def topics(request):
 """Provide list of topics."""
    public_topics = Topic.objects.filter(public=True).order_by('date_added')
    if request.user.is_authenticated:
        private_topics = Topic.objects.filter(owner=request.user).order_by('date_added')
        topics = public_topics | private_topics
    else:
        topics = public_topics

    context = {'topics': topics}
    return render(request, 'learning_logs/topics.html', context)

Есть нужный мне класс, чтобы он работал как предыдущая функция. Не могли бы вы подсказать, что должно быть в queryset с public, owner и request?

class TopicsHome(ListView):

    model = Topic

    template_name = 'learning_logs/topics.html'

    context_object_name = 'topics'
    
    def get_queryset(self):
        return Topic.objects.filter(public=True).order_by('date_added')

В конце концов я сделал это по совету @Avinash Raj, спасибо!) но код кажется больше с классами)) я думал, что в классах будет проще. Это нормально или есть какой-то лучший способ реализовать это через классы?

class TopicsHome(ListView):
    model = Topic
    template_name = 'learning_logs/topics.html'
    context_object_name = 'topics'
    
    def get_queryset(self):
        public_topics = Topic.objects.filter(public=True).order_by('date_added')
        if self.request.user.is_authenticated:
            private_topics = Topic.objects.filter(owner=self.request.user).order_by('date_added')
            topics = public_topics | private_topics
        else:
            topics = public_topics
        return topics
Вернуться на верх