Django模型XOR在模型级别?

时间:2018-05-18 09:30:52

标签: django django-models

我正在本网站上实施方法#2。

目前,我有:

class Owner(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,
                                null=True, blank=True, on_delete=models.SET_NULL)
    group = models.OneToOneField(Group,
                                 null=True, blank=True, on_delete=models.SET_NULL)

我的要求是,所有者只有一个用户或组,但不能同时拥有这两个用户。

当我的脚本通过直接调用Owner.create创建脚本时,如何强制执行此操作?

1 个答案:

答案 0 :(得分:0)

覆盖模型保存以处理案例

class Owner(models.Model):
  user = models.OneToOneField(settings.AUTH_USER_MODEL,
                            null=True, blank=True, on_delete=models.SET_NULL)
  group = models.OneToOneField(Group,
                             null=True, blank=True, on_delete=models.SET_NULL)

  def save(self, *args, **kwargs):
    if self.group != None and self.user != None:
       self.user = None
    elif self.group == None and self.user == None:
       <RETRUN ERROR>
    super(Owner, self).save(*args, **kwargs)