如何使用2个级别解决Django ManyToMany关系

问题描述

我在Django 1.11中有这样的结构:

class Profile(models.Model):
    username = models.CharField()

class Post(models.Model):
    profile = models.ForeignKey(Profile)
    hashtag = models.ManyToManyField(Hashtag)

class Hashtag(models.Model):
    name = models.CharField()

在这将创建中间表post_hashtag,但是如何使用 profile.hashtags.all()访问所有主题标签

解决方法

您可以通过过滤器获取这些内容,例如:

Hashtag.objects.filter(post__profile=my_profile)

因此,例如,如果要将其作为属性添加到Profile类中,则可以将其实现为:

class Profile(models.Model):
    username = models.CharField()

    @property
    def hashtags(self):
        return Hashtag.objects.filter(post__profile=self)