2012-05-07 6 views
7

私はDjango(1.4)モデルで多対多の関係を持っています。Djangoで多対多リレーションシップの少なくとも1つの値を強制しますか?

class UserProfile(models.Model): 
    foos = models.ManyToManyField(Foo) 

各ユーザー(プロファイル)に少なくとも1つのFooがあることを強制したいと思います。 Foosは、0以上のユーザ(プロファイル)を持つことができます。

私はこれがモデルと管理者のレベルで強制されるのが大好きですが、管理者にそれを強制するだけで十分でしょう。

私が正しく理解するならば、Django-speakの 'many'はゼロ以上です。

私はManyToOneOrMore関係が必要です。これどうやってするの?

おかげで、

クリス。

答えて

4

これをモデルレベルで@Gregの詳細として適用することはできませんが、の場合はフィールドを必須にするだけでフォームに適用できます。これにより、誰もシェルレベルのアクセスがfooなしでUserProfileを手動で作成することを防ぐことはできませんが、ブラウザベースのフォーム作成メソッドを使用している人は誰でも強制的に強制します。

7

残念ながら、ManyToManyデータは他のモデルフィールドとは別に保存されるため、これはモデルレベルでは可能ではありません。カスタムフォームを指定し、フォームにclean()メソッドを書くことによって、管理者レベルでそれを実行できるはずです。