2012-03-21 5 views
8

以外の真の私は、このモデルを持っている:すべての部品が必ずシリアル番号を持っていないので、Djangoはユニーク=ブランク値

class Part(models.Model): 
    serial_number = models.CharField(max_length=15, null=True, blank=True, validators=[validate_serial], unique=True) 
    .... 

シリアル値は空白とnullにすることができます。しかし、シリアル番号なしで一部を保存した後、ブランクはもはやユニークではありませんし、私はこのエラーを取得:このシリアル番号はすでに存在していると

パートを。

これを回避する方法はありますか?私は既にthis questionを見ましたが、私はモデルフォームを持っていません。私は管理者を使用するか、コード内で直接行います。

+5

adminを使用する場合は、カスタムモデルフォームを定義できます。答えにどのようにリンクしているかを示しました。コードでやっているのであれば、ブランクの値として ""を使うのではなく、 '' part.serial_number = None''を設定してください。 – Alasdair

答えて

-1

私が持っnull値が一意性制約に考慮されていないことを確信しています。これを回避する方法は、nullを使用せず、代わりに空の文字列を使用することです。したがって、null=Trueを削除してください。

+0

はい、一意の列にnull以上の値を設定できます。しかし、OPは複数の空の値を許可したい。したがって、一意性チェックでは1つの空の文字列しか許可されないため、nullを許可する必要があります。 – Alasdair

4

私は同じ問題に出くわしたと保存するときにフィールドのNoneを指定して、それを修正しました。

default=Noneを指定するだけでなく有用である可能性があります。