获取存储在多对多字段中的所有唯一值

时间:2012-10-20 06:47:18

标签: django

我有一个名为categories的多对多字段,我想获得存储在该字段中的不同值。

以下是我的模特:

class Book (models.Model):
    categories=models.ManyToManyField(Category, related_name = 'categories', blank = True, null=True)

这是我的分类模型:

class Category (MPTTModel):
    category = models.CharField(max_length=250)
    parent = TreeForeignKey('self', blank=True, null=True, related_name='children')

我想获得与书籍相关的每一个类别。我该怎么做?

2 个答案:

答案 0 :(得分:5)

如果您想获取与一个图书实例相关的类别,请执行book_inst.category_set.all()。不会有重复。

但我想,您希望获得与任何 Categories相关的所有Book,您可以这样做:

Category.objects.filter(categories__in=[Book.objects.all()]).distinct()

答案 1 :(得分:0)

基本上,如果是,则需要从类别侧进行反向查找以检查是否有该类别的书籍,添加到生成的查询集中。因为Book中的related_name参数是'categories',所以反向查找看起来像这样。

  Category.objects.filter(categories__in = Book.objects.all())