#python #django #django-queryset
#python #django #django-набор запросов
Вопрос:
Я фильтрую объекты модели моего проекта по аутентифицированному пользователю, используя get_context_data в моем ListView
class myprojects(LoginRequiredMixin, ListView):
model = Project
template_name = 'my_project_list.html'
ordering = ['project_title']
def get_context_data(self, *args, **kwargs):
context = super(myprojects, self).get_context_data(**kwargs)
context['my_projects'] = Project.objects.filter(engineer=self.request.user)
return context
В шаблоне
{% for my_project in my_projects %}
{{ my_project }}
{% endfor %}
В моем шаблоне есть форма для поиска проектов, и я использую get_queryset в том же ListView. Я получаю поиск, но он не фильтруется в шаблоне
class myprojects(LoginRequiredMixin, ListView):
model = Project
template_name = 'my_project_list.html'
ordering = ['project_title']
def get_context_data(self, *args, **kwargs):
context = super(myprojects, self).get_context_data(**kwargs)
context['my_projects'] = Project.objects.filter(engineer=self.request.user)
return context
def get_queryset(self, *args, **kwargs):
context = super().get_queryset(*args, **kwargs)
search = self.request.GET.get('buscar', None)
print(search)
if search:
context = context.filter(
Q(project_title__icontains=search) |
Q(category__title__icontains=search)
).distinct()
return context
Примечание: когда я использую {% for project in object_list %}
вместо {% for project in my_projects %}
, он выполняет поиск без проблем, но у меня больше нет фильтра по пользователю
Ответ №1:
Просто фильтруйте внутри метода get_queryset
def get_queryset(self, *args, **kwargs):
queryset = super().get_queryset(*args, **kwargs)
search = self.request.GET.get('buscar', None)
queryset = queryset.filter(engineer=self.request.user)
if search:
queryset = queryset.filter(
Q(project_title__icontains=search) |
Q(category__title__icontains=search)
).distinct()
return queryset
Комментарии:
1. Большое вам спасибо, вы сэкономили мне часы исследований. Да благословит тебя Бог, друг