查询ManyToMany关系,没有命名的through字段

时间:2012-04-04 07:08:37

标签: python django django-orm

我的模型中有这个设置:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Topic(models.Model):
    name = models.CharField(max_length=100)

class Article(models.Model):
    name = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author, null=True, blank=True)
    topics = models.ManyToManyField(Topic, null=True, blank=True)

鉴于作者,我想知道他写的主题是什么:

def author_info(request, pk):
    author = get_object_or_404(Author, pk=pk)
    topics = ????

如果我指定了一个直通字段,我可以使用它,但是现在Django为我创建了穿透字段,并且因为它应该是透明的,所以我宁愿不引用字段(除非有适当的Django构造) )。

1 个答案:

答案 0 :(得分:1)

使用Lookups that span relationships

topics = Topic.objects.filter(article__authors=author).distinct()

注意:你必须在这里使用distinct,因为不同的文章可以选择相同的主题。