Я настоятельно рекомендую, чтобы структура вашей базы данных точно отражала вашу модель данных, а не основывалась на том, что создает наиболее удобные формы по умолчанию в Django.Настраивать формы несложно, но их трудно избежать и опасно переносить повреждение данных.Например, если вы сделаете так, как вы предлагаете, ничего не сделаете, чтобы предотвратить создание недействительных данных другими способами (представлениями, консолью и т. Д.)
Так что одним из вариантов является использование ForeignKey
ограничение, как вы предложили.
Компромиссным решением было бы сохранить ManyToManyField
и наложить соответствующее ограничение на модель through
.Это позволит вам продолжать использовать любые формы, которые вы используете в настоящее время.Примерно так:
class Group(models.Model):
name = models.CharField(max_length=30)
countries = models.ManyToManyField(Country, through="GroupCountry")
class GroupCountry(models.Model):
group = models.ForeignKey(Group)
country = models.ForeignKey(Country, unique=True)
Обратите внимание, что любое решение, включающее ManyToManyField
, будет иметь снижение производительности, так как есть дополнительная таблица, к которой нужно присоединиться.Также обратите внимание, что это изменение включает в себя потенциально сложную миграцию;Вы можете найти несколько вопросов и ответов о том, как это сделать.