【发布时间】:2019-08-23 05:44:04
【问题描述】:
我有一个简单的搜索框,可以按标题、名字、姓氏搜索帖子(过滤帖子),但是无论我多么努力,我都无法按用户全名搜索
在我的模型中我有
User.full_name = property(lambda u: u"%s %s" % (u.first_name, u.last_name))
在我的终端 Django Shell 我得到以下结果
>>> user.first_name
'Blake'
>>> user.last_name
'Lively'
>>> user.full_name
'Blake Lively'
现在,当我尝试使用用户 full_name 进行搜索时,出现以下错误
相关字段查找无效:全名
Q(user__full_name__icontains=query)
以下是我的看法
class QList(SelectRelatedMixin, ListView):
model = Question
select_related = ('user', 'group')
template_name = 'questions/all_questions.html'
context_object_name = 'all_questions'
paginate_by = 5
def get_queryset(self):
queryset = super(QList, self).get_queryset().order_by('-created_at')
query = self.request.GET.get('q')
if query:
queryset = queryset.filter(
Q(title__icontains=query) | #This works
Q(user__username__iexact=query) | #This works
Q(user__first_name__iexact=query) | #This works
Q(user__last_name__iexact=query) | #This works
Q(user__full_name__icontains=query) #This Fails what am I doing worng
)
return queryset
试过这个
class QList(SelectRelatedMixin, ListView):
model = Question
select_related = ('user', 'group')
template_name = 'questions/all_questions.html'
context_object_name = 'all_questions'
paginate_by = 5
def get_queryset(self):
queryset = super(QList, self).get_queryset().order_by('-created_at')
query = self.request.GET.get('q')
if ' ' in query:
query = query.split()
queryset = queryset.filter(
chain(User.objects.filter(first_name__icontains=query[0], last_name__icontains=query[1]),
User.objects.filter(first_name__icontains=query[1], last_name__icontains=query[0])))
return queryset
else:
queryset = queryset.filter(
Q(title__icontains=query) |
Q(user__username__iexact=query) |
Q(user__first_name__iexact=query) |
Q(user__last_name__iexact=query)
)
return queryset
出现错误
“NoneType”类型的参数不可迭代
if ' ' in query:
【问题讨论】:
-
你能显示模型用户吗?如果它的唯一属性,你不能过滤后端它
-
@NgocPham 它是 django 默认用户模型
-
Ivan 在question you mentioned 中的回答正是您所需要的(即使字段名称相同)。您对这种方法有什么问题?
标签: django python-3.x django-views django-queryset