Как ограничить модель Django одним отношением "один к одному"?
В настоящее время я создаю приложение Django, которое требует двух различных типов пользователей, и я знаю, что хранение информации об аутентификации в нескольких моделях/таблицах является плохой идеей.
Поэтому я создал модель User для обработки аутентификационной информации (имя пользователя, пароль и т.д.). Затем я создал две различные модели, одну для покупателей и одну для продавцов, каждая со своими уникальными полями и связью один-к-одному с моделью User.
Теперь я подумал, что это будет работать, но проблема в том, что все еще возможно, чтобы разные покупатель и продавец имели одно и то же отношение User. Как я могу предотвратить это и ограничить модель User только одним отношением один-к-одному?
Вы можете добавить это поле в модель пользователя вместо вашего способа, сделав это, вы можете гарантировать, что один пользователь может иметь только один тип
Для достижения цели можно использовать unique_together следующим образом:
class Buyer(models.Model):
user_id = models.ForeignKey(User, ...)
id = models.AutoField(primary_key=True)
class Meta:
unique_together = ('id', 'user_id',)
class Buyer(models.Model):
user_id = models.ForeignKey(User, ...)
id = models.AutoField(primary_key=True)
class Meta:
unique_together = ('id', 'user_id',)
Таким образом, один покупатель связан только с одним пользователем, и один продавец тоже связан только с одним пользователем.