Отношения «многие ко многим» с Postgresql и доступ к ним - PullRequest
0 голосов
/ 19 апреля 2020

Я работаю с базой данных Posgtgre sql о фильмах, и у меня есть несколько отношений «многие ко многим», как, например, следующее:

Есть таблица с фильмами и каждый mov ie имеет несколько ключевых слов, а также два фильма могут иметь одно и то же ключевое слово. Для этого у нас есть три таблицы: movies, keywords и movies_keywords.

Таблица с именем movies не требует пояснений, она содержит заголовок, идентификатор и множество атрибутов, которые mov ie has.

Таблица movies_keywords имеет два столбца: идентификатор mov ie и идентификатор ключевого слова. Это похоже на «середину», которая соединяет две другие таблицы.

Наконец, таблица keywords содержит идентификатор ключевого слова и соответствующее ключевое слово.

Проблема заключается в следующем: I ' Я работаю с Django, и мне нужно получить доступ ко всем ключевым словам для одного mov ie, но они не напрямую связаны, есть эта средняя точка, которая не позволяет мне получить доступ к именам. У вас есть идеи, как этого достичь?

Заранее спасибо!

РЕДАКТИРОВАТЬ: это 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)

1 Ответ

2 голосов
/ 19 апреля 2020

Вы хотите добавить через к своей первой модели (также имена таблиц моделей должны быть единичными в django -> стиль кода )

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

После этого вы можете получить доступ к данным, как в документ «многие ко многим» документ

movie = Movie.object.filter(pk=1) 
keywords = movie.keywords.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...