从连接表中按照外键获取属性

时间:2011-03-01 02:51:14

标签: django

我有一个联接表:

class ReviewTag(models.Model):

    review = models.ForeignKey(Review)
    tag = models.ForeignKey(Tag)

我执行以下操作以获取ReviewTag对象列表:

review.reviewtag_set.all()

如果Tag有一个名为'name'的属性。如何从对象列表中创建名称列表?

2 个答案:

答案 0 :(得分:1)

[reviewtag.tag.name for reviewtag in review.reviewtag_set.all().select_related()]

[tag.name for tag in Tag.objects.filter(reviewtag__review=review)]

Tag.objects.filter(reviewtag__review=review).values_list('name', flat=True)

django的开发版本在JOIN中支持values http://docs.djangoproject.com/en/dev/ref/models/querysets/#values

哪会让你做到

review.reviewtag_set.all().values('tag__name')

好东西。

答案 1 :(得分:0)

对于您的评论课,您可以添加带有通过attr的M2M。 http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

 class Review(models.Model):
    ..
    tags = models.ManyToMany('yourapp.Tag', through='ReviewTag')


  review.tags.values_list('name', flat=True)

我相信会给你一个与这篇评论相关的标签名称的懒惰列表。