【问题标题】:Django : query a many to many relationDjango:查询多对多关系
【发布时间】:2018-04-23 16:50:42
【问题描述】:

我在 Django 中遇到了多对多关系。

这是我的模型:

class Actors(models.Model):
    name       = models.CharField(verbose_name="Actor's name", max_length=128)
    # other stuff

    class Meta:
        verbose_name = "Actor"
        ordering     = ["name"]

    def __str__(self):
        return self.name



class Movies(models.Model):
    title       = models.CharField(verbose_name="Movie's title", max_length=128)
    casting     = models.ManyToManyField("models.Actors", verbose_name="Actors")

    # other stuff

    class Meta:
        verbose_name = "Movie"
        ordering     = ["title"]

    def __str__(self):
        return self.title

我希望打印一位演员出演的所有电影。 所以在我的演员看来,我得到了:

def actor(request, id):
    actor  = get_object_or_404(Actors, id=id)
    # Trying to get the movies played by the actor
    #     -> goal : filter the casting field and compare 
    #        the actors_id in movies_movies_actors to 
    #        the id parameter
    movies = Movies.casting.filter(actors_id=id)
    return render(request, 'actors/actor.html.twig', {'actor': actor, 'movies': movies})

我没有找到正确的方法来访问强制转换字段并获取出现“id”的所有行。

你能帮帮我吗?

谢谢

【问题讨论】:

  • Movie.objects.filter(casting_id=actor)

标签: django many-to-many


【解决方案1】:

related_name 更强大:

def actor(request, id):
    actor  = get_object_or_404(Actors, id=id)
    movies = actor.movies_set.all()
    return render(request, 'actors/actor.html.twig', {'actor': actor, 'movies': movies})

【讨论】:

  • 很高兴能帮上忙!
【解决方案2】:

如果我没记错的话,下面的语法应该是你要找的。​​p>

movies = Movies.objects.filter(casting__actors_id=id)

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 2014-07-14
    • 2021-03-07
    • 2019-05-18
    • 2017-02-02
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多