我正在尝试在Django中为用户实现搜索功能。
我可以使用Q
进行一次表搜索,但这里的场景是不同的。
以下是我的模特:
Class Profile(models.Model)
name = models.OnoeToOneField(User)
category = models.ForeignKey(Category)
Tags = models.ForeignKey(Tags)
class Category(models.Model)
name = models.Charfield(max_length = 100)
sub_cat = models.ForeignKey(SubCategory)
我想搜索属于categoey和/或标签的用户
但我无法找到办法。我不想使用Haystack或Whoosh。
请告诉我一些简单的方法来实现这一目标。
答案 0 :(得分:1)
您是否尝试过这样的查询集?
User.objects.filter(
Q(profile__category__name__icontains=search_string) |
Q(profile__Tags__name__icontains=search_string)
).distinct()
有关详细信息,请参阅complex lookups with Q objects。
请注意,我正在使用distinct()
来消除重复结果,因为可以选择相同的用户有两个原因(每个原因对应一个Q对象)。
(当然,为了示例,您应该调整我放置的Tags__name
,但我没有Tags模型的来源。)
答案 1 :(得分:1)
事实上很容易:
使用类别名称进行过滤:
Profile.objects.filter(category__name__iexact='category 1')
使用类别ID进行过滤:
Profile.objects.filter(category__pk=27)
使用子类别名称进行过滤:
Profile.objects.filter(category__sub_cat__name__iexact='exact sub category name')