0


0

Django正規表現フィールド-一意で空白なし

ModelFormがあり、その中にCharFieldがあります。CharFieldはModelで一意と宣言されています。 しかし、私には2つの問題があります:

  1. フォームに同じ名前のフィールドを入力すると、 エラーメッセージ。

  2. このフィールドには空白を含めないでください。

ModelFormを使用してそれを行うことは可能ですか?

2 Answer


2


スペースを削除するには、clean__fieldname_関数を作成してスペースを削除します。

一意性については、メタフィールドunique_togetherにも注意してください。 必要かどうかはわかりませんが、掘り下げるまで知りませんでした。

追加して失敗する前に本当に一意性チェックを行う必要がある場合は、clean_ *関数でも実行できます。 ただし、データベースがそれを処理し、標準的な方法で失敗することを想定し、エラーメッセージを適切に設定することをお勧めします。 そうすることで、後で制約を変更した場合、より簡単にフロースルーします。 そして、他の人があなたのコードを維持する必要がある場合、それはより標準になります。

お役に立てれば。


2


あなたはこれに近い何かをすることができます:

class MyModelForm(forms.ModelForm):
    # your field definitions go here

    def clean_myuniquefield(self):
        # strip all spaces
        data = str(self.cleaned_data['myuniquefield']).replace(' ', '')
        model = self._meta.model
        # check if entry already exists
        try:
            obj = model.objects.get(myuniquefield=data)
        except model.DoesNotExist:
            return data
        raise forms.ValidationError("Value already exists!")