我正在尝试在个人资料页面中添加搜索字段。它适用于某些模块字段。我的问题是我使用按属性排序(如果我输入错误,请更正)。
我有一个模特
class employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(max_length=50)
gender = models.CharField(max_length=1,choices=(('M','Male'),
('F','Female')),blank=True)
age = models.PositiveIntegerField(blank=True, null=True)
salary = models.CharField(blank = True,max_length=50)
def __str__(self):
return self.user.username
并查询
def view_profile(request):
employees = employee.objects.all()
query = request.GET.get("q")
if query:
employees = employee.objects.filter(
Q(last_name__icontains=query)|
Q(first_name__icontains=query)|
Q(gender__icontains=query)|
Q(email__icontains=query)|
Q(age__icontains=query).order_by('-id')
).distinct()
args= {'user':request.user,'employees':employees}
return render(request,'profile.html',args)
我遇到了错误:
'Q' object has no attribute 'order_by'
我想知道另一个小错误 当我在用户名上搜索字段时,出现这种错误:
Q(user__icontains=query)
Related Field got invalid lookup: icontains
请提供有关如何进行故障排除的建议或我可以阅读的任何文档。对于上述任何错误
答案 0 :(得分:3)
这是一个简单的错字。错位放错了位置。更改为
WebView
答案 1 :(得分:2)
第一个错误是一个简单的错字错误。
第二个是您获取数据的问题
包含用于字符串字段而不是相关字段的
它可以这样写:
Q(user__in=query)
或类似的东西
Q(user__username__icontains=query_string)