2014-01-19 24 views
1

我有一個關於django灼熱的問題,我無法弄清楚。 我有兩個型號:使用django和tastypie進行高級搜索

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

我的搜索查詢是這樣的:?/類別= 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 

的分類列表(類別= slug1-slug2-slug3?)都可以是子類別和subsubcategories。

那麼我如何首先過濾slug2上的帖子,然後過濾slug3上的帖子?


現在和我一起發生的事情是,當我過濾slug2時,沒有留下來過濾slug3的職位。所以我想我必須通過slu loop,然後加入結果?

+0

main_category不是Post對象字段。你的意思是Post.object.filter(category = main_category)? – gwaramadze

+0

是的remy_g,這就是我的意思。 – SteinOveHelset

+0

除了提供類別,子類別,子類別或subsubsubsubsubcategory,是時候您使用'django-mptt' – adityasdarma1

回答

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))