繁体   English   中英

与 Postgresql 的多对多关系并访问它们

[英]Many-To-Many relationships with Postgresql and accesing them

我正在使用有关电影的 Posgtgresql 数据库,并且我有一些多对多关系,如下所示:

有一个电影表,每部电影都有一些关键字,两部电影可以有相同的关键字。 为此,我们有三个表: movieskeywordsmovies_keywords

名为movies的表是不言自明的,它包含电影的标题、ID 和许多属性。

movies_keywords有两列:电影 ID 和关键字 ID。 这就像连接另外两个表的“中间”。

最后,表keywords包含关键字 ID 和相应的关键字。

问题如下:我正在使用 Django 并且我需要访问一部电影的所有关键字,但它们没有直接连接,这个中间点不允许我访问名称。 您知道如何实现这一目标吗?

提前致谢!

编辑:这是models.py(相关部分)

class Movies(models.Model):
    title = models.CharField(max_length=30, blank=True, null=True)
    (...)
    director_name = models.CharField(max_length=30, blank=True, null=True)
    class Meta:
        managed = False
        db_table = 'movies'

class MoviesKeywords(models.Model):
    movie = models.ForeignKey(Movies, models.DO_NOTHING, blank=True, null=True)
    keyword = models.ForeignKey(Keywords, models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'movies_keywords'

class Keywords(models.Model):
    keyword = models.CharField(max_length=30, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'keywords'

    def __str__(self):
        return str(self.keyword)

您想添加您的第一个 model (model 表名在 django -> 代码样式中应该是单数)

class Movie(models.Model):
      ...
      keywords = models.ManyToManyField('Keyword', through='MoviesKeywords', related_name='movies')

之后,您可以像在多对多文档中一样访问数据

movie = Movie.object.filter(pk=1) 
keywords = movie.keywords.all()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM