在Django中从queryset中删除对象的最简单方法

时间:2012-11-06 17:29:47

标签: python django

我有一个查询集categories = unipart.categories.all(),它是unipart对象链接到的所有类别。

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

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

例如,如果列出了unipart: 肉豆蔻(父母=香料)和 香料(父母=食物)

然后我只想包括Nutmeg - 所以基本上我想从查询集'弹出'Spices。

最好的方法是什么?我宁愿不使用清单。

这是我的模特:

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

1 个答案:

答案 0 :(得分:2)

您可以将具有绑定到此unipart项目的子类别的类别排除在外:

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

此处categorieschild是类别子项的相关名称。