我有以下型号:
class User(models.Model):
email = models.EmailField(max_length=254, null=False, unique=True)
referral_code = models.CharField(max_length=10, null=False, unique=True)
使用Django shell来保存带有referdecode undefined的用户实例:
u = User(email="test@example.com")
u.save()
这没有引起异常。我的理解是null = False需要设置referral_code - 这不是这种情况吗?我将如何实现这种行为?
更新
我注意到该字段设置为u.referral_code=''
,因此在给定唯一性约束的情况下,当我尝试使用新实例重复该过程时,这会引发异常。我宁愿抛出异常,因为我没有设置字段......
答案 0 :(得分:2)
referral_code
的值不是null
,而是''
(空白字符串)。这是CharField
的默认值。
更新了问题:
通过覆盖模型上的save
,可以在数据存储到数据库之前引发错误
class User(models.Model):
email = models.EmailField(max_length=254, null=False, unique=True)
referral_code = models.CharField(max_length=10, null=False, unique=True)
def save(self, *args, **kwargs):
assert self.email, "The 'email' field must be populated."
super().save(*args, **kwargs)
应该注意的是,在可能的情况下,这不是表格验证的首选。