0

我正在尝试在 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)

我想搜索属于某个类别和/或某个标签的用户

但我无法找到一种方法来做到这一点。我不想使用 Haystack 或 Whoosh。

请向我建议一些简单的方法来实现这一点。

4

2 回答 2

1

你试过这样的查询集吗?

User.objects.filter(
    Q(profile__category__name__icontains=search_string) |
    Q(profile__Tags__name__icontains=search_string)
).distinct()

有关详细信息,请参阅使用 Q 对象的复杂查找

请注意,我distinct()用于消除重复结果,因为可以出于两个原因(每个对应于 Q 对象)选择相同的用户。

(当然,Tags__name为了示例,您应该按原样调整,但我没有标签模型的来源)。

于 2013-02-13T08:22:50.607 回答
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')
于 2013-02-13T08:25:23.040 回答