0

ある状況下で EXCEPT が必要なように機能するカスタム管理者検証を作成しました。

多対多フィールドで作成されたリストに正しい数のアイテム (「プレイヤー」) が含まれていること、およびリストの男性:女性の比率が許容範囲内であることを確認するように設計されています。

def clean(self):
    super(GameRosterForm, self).clean()
    players = self.cleaned_data.get('players', None)
    RosterRulesOn = self.cleaned_data.get('RosterRulesOn', None)
    women = players.filter(sex='F')
    womenPct = int((women.count()/float(players.count()))*100)
    if RosterRulesOn is True and players.count() < 8:
        raise ValidationError('Rosters must have at least 8 players. You have only selected %s.' % (players.count())) 
    if RosterRulesOn is True and players.count() > 18:
        raise ValidationError('Rosters cannot have more than 18 players. You have selected %s.' % (players.count()))
    if RosterRulesOn is True and womenPct < 40:
        raise ValidationError('Women must make up at least 40 percent of roster. They only constitute %s percent now.' % (womenPct))   
    return self.cleaned_data

私が言うように、ほとんどの場合は問題なく動作しますが、ユーザーがまだプレーヤーを m2m に追加していない場合、エラーが返されます: sex='F') 行。

問題を回避するために「if」条件と「try」条件をいくつか試しましたが、うまくいく解決策が見つかりません。

4

1 に答える 1

0

これはどう:

players = self.cleaned_data.get('players', None)
RosterRulesOn = self.cleaned_data.get('RosterRulesOn', None)
women = [player for player in players if player.sex=='F']
womenPct = int((len(women)/float(players.count()))*100)
于 2013-01-20T00:28:31.620 に答える