使用django和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。所以我想我必须循环通过蛞蝓,然后加入结果?

不确定这是否有效,但 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))

最新更新