我有一个名为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')
我想获得与书籍相关的每一个类别。我该怎么做?
答案 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())