我想在我的主页中包含一个搜索字段。它适用于某些模块字段。我的问题是当我使用ForeignKey字段时(如果我错了请纠正我)。
models.py
class Location(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
my_location = models.CharField(max_length=120, choices=LOCATION_CHOICES)
update_date = models.DateField(auto_now=True, null=True)
def __str__(self):
return self.my_location
class UserProfile(models.Model):
user = models.ForeignKey(User)
# The additional attributes we wish to include.
user_base = models.CharField(max_length=120, choices=LOCATION_CHOICES)
user_position = models.CharField(max_length=120)
user_phone = models.PositiveIntegerField()
def __unicode__(self):
return self.user.username
views.py
def search_by_location(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
locations = Location.objects.filter(my_location__icontains=q).order_by('-update_date')
else:
locations = Location.objects.order_by('-update_date')
context = {'locations': locations}
return render(request, 'index.html', context)
我的问题是如果我在过滤器查询中使用user
而不是my_location
我收到错误:
相关字段无效查找:icontains
请提供有关如何排除故障的建议或我可以阅读的任何文档。
答案 0 :(得分:32)
您可以在文本字段上使用icontains
查找。 user
是相关(整数)字段。而不是user
使用user__username
。
locations = Location.objects.filter(user__username__icontains=q)
答案 1 :(得分:0)
class SearchView(ListView):
model = Profile
template_name = 'blog/search_results.html'
context_object_name = 'all_search_results'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
user_name = self.request.GET.get('search', '')
context['all_search_results'] = Profile.objects.filter(user__username__icontains=user_name )
return context
这是另一个关于如何过滤对象的示例。如果搜索用户,请记住用户 user_username__icontains=user_name
还请记住,如果您使用 Profile
,您将获得与使用 id
不同的 User