我有2个痣,用户和帐户。用户可以是职员或普通用户。 通常,一个用户只能拥有一个帐户。
这就是我现在拥有的:
class User(AbstractBaseUser):
account = models.OneToOneField(Account, null=True, on_delete=models.CASCADE)
但是在特殊情况下,只有用户为is_staff,用户才能拥有多个或没有帐户。
现在的逻辑是拥有一个ForeignKey:
class User(AbstractBaseUser):
account = models.ForeignKey(Account, on_delete=models.CASCADE)
但是在这种情况下,如何在Django Admin中停止运行,否则,如果一个用户不是员工,那么该用户将拥有多个外键,并强制普通用户具有模拟的OneToOne关系。
答案 0 :(得分:0)
如果您想建立一个职员用户可以拥有多个帐户的Many-to-one关系,则该帐户模型应包含外键。另外,您可以override使用类似于以下代码的帐户的保存模型来增强条件:
class Account(...):
user = models.ForeignKey(User, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
user = self.user
if user and user.set_account.count() > 0 and not user.is_staff:
raise ValidationError(_('You cannot add another account to user {}'.format(user.username)))
super(Account, self).save(*args, **kwargs)