如何解决如何在Django用户模型中搜索对象
我有一个个人资料模型:
from django.contrib.auth.models import User
class Profile(models.Model):
first_name = models.CharField(max_length=100,blank=True)
last_name = models.CharField(max_length=100,blank=True)
user = models.OneToOneField(User,on_delete=models.CASCADE)
birthday = models.DateField(null=True,blank=True)
bio = models.TextField(blank=True,max_length=1000)
location = models.CharField(max_length=100,blank=True)
...
和搜索联系人视图:
class SearchContactsView(ListView):
model = Profile
template_name = 'users/contact_search.html'
context_object_name = 'qs'
def get_queryset(self):
q1 = self.request.GET.get('contact_name')
q2 = self.request.GET.get('contact_location')
if q1 or q2:
return Profile.objects.filter(Q(first_name__icontains=q1) |
Q(last_name__icontains=q1),location__icontains=q2)
return Profile.objects.all()
它工作正常,但我也希望能够通过用户字段搜索联系人。有人知道这样做的方法吗?
EDIT (我的用户的用户名)是他们在注册该网站时创建的,目前无法编辑。由于它们是OneToOneField,因此会通过下拉列表显示在管理页面上。我认为我的问题是django仅将它们识别为IntegerField('pk'),但我需要以某种方式将其强制转换为字符串值。我是这样认为的,如果可以的话,如何实现?
解决方法
您可以添加到模板中,以允许用户输入user_username并将该用户名保存到q3:
q3 = self.request.GET.get('user_username')
之后,您可以相应地调整If条件,然后将返回值更改为:
Profile.objects.filter(Q(first_name__icontains=q1) |
Q(last_name__icontains=q1),location__icontains=q2,user__username=q3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。