python - Django:より複雑な一意性制約?

python sql django

私のモデルでは:

class MyModel(models.Model):
  active = models.BooleanField()
  path = models.CharField(max_length = 512)


'path'属性は、アクティブがTrueであるインスタンス間で一意であることを制限したいと思います。

save()のオーバーライドは機能しない可能性があります。2つの保存が同時に行われた場合、両方ともテストに合格して保存される可能性があるためです。データベースレベルでこのような条件付き一意性制約を設定するために使用できるトリックまたはカスタムSQL(MySQLを使用しています)はありますか?
答え
おそらく探しているのはモデルの検証です。これは1.2で導入され、十分に文書化されています。 Django Models Instances : Validating Objects

データベース行がすべてDjango ORMを介して作成されている限り、これを行うためにいくつかのトリッキーなSQLを書くことができるかもしれませんが、モデルの検証はより保守可能なソリューションです。

余談:データベースレベルでそれを行う方法に興味があります。あるレベルの事前コミットトリガーがあるのではありません。ある値が別の値に依存することの真実性は、私がパターンを見たことがないものです。 active + pathに2フィールドの一意の制約があると、1つのfalse、1 true、および任意の数のNULLアクティブ行が特定のパス値に対して許可されます(NullBooleanFieldが提供するように、アクティブがnull可能であると想定)。
関連記事

python - Pythonでデータストアを適切にクエリする方法は? -基本的な問題

python - djangoを使用してFacebookのメールを取得する

python - Pythonがサブプロセスと通信する

python - ソラリス上のpython numpy、遅い、またはリンクされていませんか?

python - Google App EngineのSSLError(ローカル開発サーバー)

python - Django:STATIC_URLはappnameをURLに追加します

python - flickAPI:ユーザーアカウントのセットを一覧表示するにはどうすればよいですか?

python - Pythonの他の属性定義内からクラス属性にアクセスする

python - CherryPyでのユーザー管理

python - GStreamerとTheora