2012-11-06 25 views
0

我有一个查询集,categories = unipart.categories.all(),这是一个unipart对象链接到的所有类别。从Django的查询集中消除对象的最简单方法

但是,我想删除此列表中的顶级类别 - 即。那些具有unipart也列在其中的子类别。

或者那些parent_id等于查询集中category_id之一的类别。

例如,如果一个unipart在上市: 肉豆蔻(父=香料)和 香料

那么我只想包括肉豆蔻(父=食品) - 所以基本上我想“流行'来自查询集的香料。

这样做的最好方法是什么?我宁愿不使用列表。

这里是我的模型:

class UniPart (models.Model): 
categories=models.ManyToManyField(Category, related_name = 'unipart') 

class Category (MPTTModel): 
    category = models.CharField(max_length=250) 
    oc_id= models.IntegerField() 
    parent = TreeForeignKey('self', blank=True, null=True, related_name='children') 
    def __unicode__(self): 
+0

发布你的模型总是有帮助,而不是用单词描述关系。 – miki725

+0

什么是类别管理器?你可以显示它的代码吗? – sergzach

回答

2

您可以排除谁拥有绑定到这个unipart项目的子类别的那些类别:

categories = unipart.categories.exclude(
       categorieschild__unipart = unipart).distinct() 

这里categorieschild是针对儿童类去相关的名称。

+0

谢谢,我不确定这是否正在工作。我上面张贴了我的模型。我仍然得到父母的孩子类别。 – user1328021

+0

耶实际上工作。谢谢! – user1328021

+0

很高兴听到它! – danihp

相关问题