python - Django:get_context_data 之后的 get_queryset
问题描述
我正在使用 ListView 中的 get_context_data 由经过身份验证的用户过滤我的项目模型对象
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 %}
我的模板中有一个表单来搜索项目,我在同一个 ListView 上使用了 get_queryset。我收到了搜索,但它没有在模板中过滤
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 %}
,它搜索没有问题,但我不再有用户过滤器
解决方案
只需在 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
推荐阅读
- javascript - Material-UI Rating 返回字符串而不是数字
- android - Android 中的 BLE 设备响应:字节数组到 Kotlin 中的右浮点值
- jsf - JSF 运行时是什么意思?
- java - Java中的私有访问修饰符
- java - 我希望用户像 Whatsapp 一样回复多个远程通知
- php - 在星盒中显示共同作者
- react-native - bleManager.startDeviceScan 在 iOS react-native-ble-plx 上不起作用
- r - 情感分析词云
- .net-core - xunit 将类方法作为内联数据传递
- javascript - Newman Library - 获取在收集运行期间创建的环境变量