django множественные поля «многие ко многим» с одинаковыми отношениями в модели

#django #django-models #many-to-many

#django #django-модели #многие ко многим

Вопрос:

Может ли одно и то же отношение «многие ко многим» существовать в модели несколько раз (с разными именами полей для поля)? Кажется, я не могу заставить это работать при выполнении миграции, поскольку python жалуется на уже существующую связь, когда я пытаюсь дублировать ее на другое имя.

Моя модель в настоящее время выглядит следующим образом:

 class UserLocations(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    locations = models.ManyToManyField(Locations, related_name="users")
  

Я хочу добавить дополнительное поле под названием «электронные письма», которое совпадает с полем «Местоположения». Итак, я бы просто дал ему другое связанное имя?

Ответ №1:

Да, у вас может быть несколько manytomany отношений с одной и той же моделью. У вас должны быть разные related_name для обоих для обратного доступа. Вот так

 class MyModel(models.Model):
    relation_a = models.ManyToManyField(AnotherModel, related_name='rev_relation_a')
    relation_b = models.ManyToManyField(AnotherModel, related_name='rev_relation_b')
  

Вот почему django жалуется, потому что вам приходится явно определять отдельные связанные имена для обоих.

Ответ №2:

для вашего примера это было бы:

 class UserLocations(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    locations = models.ManyToManyField(Locations, related_name="locations")
    more_locations = models.ManyToManyField(Locations, related_name="more_locations")
  

Дополнительная информация здесь: https://docs.djangoproject.com/en/2.1/topics/db/models/#be-careful-with-related-name-and-related-query-name