0

基本的に私はスポーツチームをモデル化するためのウェブサイトを書いています、そして私は2つのモデル、プレーヤーとチームを持っています。チームには、プレーヤーとのManyToManyField関係があり、キャプテンを表すOneToOneFieldもあります。これは、チームのプレーヤーに限定する必要があります(つまり、プレーヤーの1人ではないキャプテンを持つことはできません)。

class Player(models.Model):
    name = models.CharField()
    .....

class Team(models.Model):
    players = models.ManyToManyField(Player)
    captain = models.OneToOneField(Player)
    ....

基本的に私が知りたいのは、OneToOneField、キャプテンをチーム内のそれらのプレーヤーの1人だけを選択するように制限するための最良の方法は何ですか。

私が試してみました

limit_choices_to={'team_set__players__name__icontains':""} 

kwargとして、そして私が働くことができると思う他の唯一の方法は、データベースルックアップを行うキャプテンフィールドのカスタムバリデーターですが、確かにもっと良い方法があるはずですか?

助けてくれてありがとう。

4

1 に答える 1

2

モデルのcleanメソッドをオーバーライドする必要があります。ドキュメントTeamをご覧ください。

from django.core.exceptions import ValidationError

class Team(models.Model):
    def clean(self):
        if self.captain not in self.players.all():
             raise ValidationError("Captain must be already be a player")

あなたのwill メソッドは、モデルで実行されたcleanときに自動的に呼び出されます。is_valid

于 2013-03-02T06:45:04.057 に答える