Django:从django的不同表中搜索

时间:2013-02-13 08:12:34

标签: python django django-search-lucene

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

请告诉我一些简单的方法来实现这一目标。

2 个答案:

答案 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')