Как описать таблицу тройного соединения m2m в модели (Джанго) - PullRequest
0 голосов
/ 20 апреля 2010

Мой вопрос почти такой же , как и этот вопрос , за исключением того, что ВСЕ отношения должны быть "многие ко многим."

В моем файле models.py (несколько упрощенно) есть следующие классы:

class Profile(models.Model):
    # Extending the built in User model  
    user = models.ForeignKey(User, unique=True)  
    birthday = models.DateField()

class Media(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=2000)

class Role(models.Model):
    name = models.CharField(max_length=50)


Я хочу соединительную таблицу, которая выглядит примерно так:

CREATE TABLE `media_roles` (
    `media_id` bigint(20) unsigned NOT NULL,
    `profile_id` bigint(20) unsigned NOT NULL,
    `role_id` bigint(20) unsigned NOT NULL
)


  • Джон Доу - Режиссер, Сценарист, Продюсер
  • Джейн Доу - исполнительный продюсер
  • ...

Это то, что я использовал до сих пор:

class MediaRole(models.Model):
    media = models.ForeignKey(Media)
    user = models.ForeignKey(Profile)
    role = models.ForeignKey(Role)


Но разве нет лучшего способа сделать это, не включая создание отдельного класса в модели?

1 Ответ

0 голосов
/ 20 апреля 2010

Как насчет разделения двух м2м отношений?

class Profile(models.Model):
    ...
    medias = models.ManyToManyField(Media, related_name='profiles')
    roles = models.ManyToManyField(Role, related_name='profiles')

Таким образом, Django создает две таблицы ассоциаций для вас, и вы можете использовать удобные связанные поля, например:

profile = Profile.objects.get(user=someone)
print profile.medias.all()
print profile.roles.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...