使用django和tastypie进行高级搜索

时间:2014-01-19 20:39:37

标签: django search tastypie

我有一个关于用django灼烧的问题,我无法弄明白。 我有两个模型:

class Category(models.Model):
    parent    = models.ForeignKey('self', blank=True, null=True)
    title     = models.CharField(max_length=100)
    slug      = models.CharField(max_length=100)
    unique_id = models.IntegerField(blank=True, null=True)

class Post(models.Model):
    title          = models.CharField(max_length=200)
    category       = models.ForeignKey(Category, related_name='maincategory')
    subcategory    = models.ForeignKey(Category, related_name='subcategory')
    subsubcategory = models.ForeignKey(Category, related_name='subsubcategory')

我的搜索查询如下所示:/?categories = slug1-slug2-slug3-slug4-slug5, 所以我用python将它拆分成这样:

categories = request.GET.get('categories', '').split('-')

为了实现我的目标,我可能需要重建我的模型,所以这是我需要你帮助的地方。

首先,我搜索主要类别中的所有帖子:

posts  = Post.object.filter(main_category=main_category) #Main category is the first element i categories

类别列表(?categories = slug1-slug2-slug3)可以是子类别和子类别。

那么我怎样才能首先过滤slug2上的帖子,然后过滤slug3上的帖子?


我现在发生的事情是,当我对slug2进行过滤时,没有帖子可以过滤slug3。所以我想我必须遍历slugs,然后加入结果?

1 个答案:

答案 0 :(得分:1)

不确定这是否有效,但Q查询是我探索的方式。

from django.db.models import Q

categories = request.GET.get('categories', '').split('-')
posts = Post.object.filter(
    Q(category__slug__in=categories) |
    Q(subcategory__slug__in=categories) |
    Q(subsubcategory__slug__in=categories))