2017-10-06 1 views
1

私は次のモデルがあります:偽ヌル=で空のフィールドを保存するときに発生する例外 - ジャンゴ

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) 

未定義referral_codeとユーザーインスタンスを保存するためにDjangoのシェルを使用:

u = User(email="[email protected]") 
u.save() 

これは例外を発生させませんでした。私の理解は、null = Falseはreferral_codeを設定する必要があるということでした - これは当てはまりませんか?どのようにその行動を達成するだろうか?

更新

Iフィールドがu.referral_code=''に設定されていることを確認し、私は新しいインスタンスに処理を繰り返すことを試みたときに一意性制約が与えられると、このことは、例外が発生しました。フィールドを設定しなかったので例外がスローされました。

答えて

2

referral_codeの値はnullではありません。''(空文字列)です。これはデフォルトのCharFieldです。質問と一緒に更新

あなたは、データがモデル

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) 

saveをオーバーライドすることにより、データベースに格納される前に、これがないのであることに留意すべきでエラーを発生させることができます可能であれば、フォーム検証よりも優先されます。

関連する問題