访问与同一模型相关的多对多

时间:2014-11-14 05:22:06

标签: python django django-models many-to-many

我有一个电影数据库,有以下模型。我将导演细节存储在Actor模型中。那就是我创建一个演员,然后将他链接为导演。通过这个我可以得到也是演员的导演。现在我的问题是列出所有的董事。我无法编写查询。我大部分时间都得到了ReverseManyRelatedObjectsDescriptor。

class Actor(models.Model):
    actorid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=250)
    sex = models.CharField(max_length=1)

    def director_list(self):
        directors = self.filter(actor__in=Movie.director).distinct()
                        **#ReverseManyRelatedObjectsDescriptor error**
        return directors


class Movie(models.Model):
    movieid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=250)
    actor = models.ManyToManyField(Actor, related_name="actor")
    director= models.ManyToManyField(Actor, related_name="director")

请提前帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你需要那些导演的演员(没有特定的电影)。所以我要做的就是创建一个Actor的类方法,如下所示:

class Actor(models.Model):
    actorid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=250)
    sex = models.CharField(max_length=1)

    @classmethod
    def director_list(cls):

        directors_available  = set (
            d.actorid
            for movie in Movie.objects.filter(director__is_null = False)
            for d in movie.director.all()
        )
        actors_directors     = Actor.objects.filter(actorid__in = list(directors_available))

        return actors_directors

现在你可以得到所有像这样的演员的导演:

director_list = Actor.director_list()