Как ограничить модель 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',)

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

Вернуться на верх