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