我正在处理一个视图,它继承了Django的ListView
,并通过SearchMixin
使用搜索表单。以下是(简化)视图:
class ListBase(DashboardAccessMixin, SearchMixin):
queryset = CheckInType.objects.all()
def get_queryset(self):
queryset = super().get_queryset()
query = self.search_data('q')
if query:
queryset = queryset.filter(
Q(title__icontains=query) | Q(description__icontains=query))
return queryset
class CheckInTypeList(ListBase, ListView):
template_name = 'check_in_types/index.html'
然而,模板实际上并没有显示{{ object.title }}
,而只显示了{{ object }}
,它对应于CheckInType
的字符串表示。定义如下:
为了简洁起见,我将省略TimingMixin
的细节,但是self.timing
基本上是一个类似于min_weeks
和max_weeks
字段组成的字符串。在
然而,这样做的结果是,过滤并不完全符合用户看到的内容。考虑这个例子:
在这里,名为“产后检查:0周”的列表中的第一个条目是自动生成的“标题”。因此,如果我在搜索栏中搜索“产后”,然后按Enter键,我只得到一个结果:
但是我希望有两个结果。(顺便说一句,还有一个OrderingMixin
按标题的字母顺序对结果进行排序,这也是因为同一个原因而不起作用)。在
为了解决这个问题,我想在包含对象字符串表示的queryset中添加一个字段'str'
。在
在How can i get the string representation from queryset in django中的评论之后,我查看了^{
queryset = queryset.annotate(str=str(object))
这样我就可以在过滤器中添加Q(str__icontains=query)
。但是,我不确定这是否可行,因为像Count()
这样的聚合函数是一般的数据库函数,它们并不真正“了解”Python模型的字符串表示。在
如何通过实际的字符串表示来过滤结果?(我希望通过注释queryset
来实现这一点,因为这也适用于{
目前没有回答
相关问题 更多 >
编程相关推荐