#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