Django の ModelForm unique_together バリデーション
2023-12-05 07:24:36
質問事項
私は以下のようなDjangoのモデルを持っています。
class Solution(models.Model):
'''
Represents a solution to a specific problem.
'''
name = models.CharField(max_length=50)
problem = models.ForeignKey(Problem)
description = models.TextField(blank=True)
date = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = ("name", "problem")
モデルを追加するためのフォームとして、以下のようなものを使っています。
class SolutionForm(forms.ModelForm):
class Meta:
model = Solution
exclude = ['problem']
私の問題は
SolutionForm
が検証されないことです。
Solution
's
unique_together
の制約があるため
IntegrityError
を返します。私は
validate_unique
を使って手動でチェックできることは知っていますが、フォームのバリデーションでこれをキャッチして自動的にフォームエラーを返す方法はないかと考えていました。
ありがとうございます。
どのように解決するのですか?
フォームにクリーンメソッドを追加することで、ビューを修正することなく、この問題を解決することができました。
class SolutionForm(forms.ModelForm):
class Meta:
model = Solution
exclude = ['problem']
def clean(self):
cleaned_data = self.cleaned_data
try:
Solution.objects.get(name=cleaned_data['name'], problem=self.problem)
except Solution.DoesNotExist:
pass
else:
raise ValidationError('Solution with this Name already exists for this problem')
# Always return cleaned_data
return cleaned_data
今ビューで必要なことは、実行する前にフォームに問題のあるプロパティを追加することだけです。
is_valid
.
関連
-
django store to databaseは現地時間より8時間短い?(2021-05-12更新)
-
6.5、Django - モデルでJSONFieldを使用してJSONフィールドでMySQLテーブルを作成する
-
Django ForeignKey逆引きクエリにおけるfilterと_setの効率比較
-
[解決済み] Django vs. Model View Controller [終了しました]。
-
[解決済み] Django の管理者パスワードをリセットする方法は?
-
[解決済み] Django のモデルで電話番号を保存する最良の方法は何ですか?
-
[解決済み] Django でモデルのフィールドを取得する
-
[解決済み] django のテンプレートで最初の文字を大文字にする
-
[解決済み] Django: Django のアプリを完全にアンインストールするには?
-
[解決済み] django のユニットテストを複数のファイルに分散させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Django。"makemigrations "時に変更が検出されない。
-
[解決済み] Djangoでファイルをアップロードする方法は?[クローズド]。
-
[解決済み] QuerySetで空白またはNULLの名前をフィルタリングする方法は?
-
[解決済み] Django South - テーブルはすでに存在する
-
[解決済み] DjangoとReactJSを連携させる方法とは?
-
[解決済み] Django の filter と get は単一オブジェクトの場合?
-
[解決済み] Django は静的ファイルの URL をビューで取得します。
-
[解決済み] テーブルのフィールドから異なる値を選択する
-
[解決済み] django テンプレートで "ブロック" を繰り返す方法
-
[解決済み] Django はフォームが初期化された後にフィールドの値を設定します。