2011-07-08 1 views
1

私はModelMultipleChoiceFieldをサブクラス化するカスタムフィールドを持っています。クエリセットパラメータを使って表示する選択肢を提供します。このクエリーセットは特定の値を除外します。私の問題は、いくつかのワークフローのクリーンアップ操作中に、最初にクエリーセットの方法で除外されたオプションを選択する必要があるときです。この値を保存しようとすると、djangoは有効なオプションではないと言って保存を拒否します。 ModelMultipleChoiceFieldのクリーンメソッドを調べると、私は、提供された "値"が最初のクエリーセット内にあるかどうかを調べることがわかりました。これが私のジレンマを引き起こします。Djangoでは.ModelChoiceField HOWTOは、表示される選択肢を制限しますが、クリーンアップ中に制限値の1つを設定します。

私は、大きなハックなしでこの問題を回避することが可能かどうかを知りたかったのです。

+0

フィールドはまさにあなたが言ったことをしているように私に聞こえます。 –

+0

そうですが、エッジケースの1つでは、少なくとも一部の値が保存されていることを確認する必要があります。これは以前は除外されていた選択値です。 – Chantz

答えて

2

django/forms/models.py:1011はこれを持っている:

qs = self.queryset.filter(**{'%s__in' % key: value}) 

だから、それはあなたがsuper(MyField, self).clean(value)を呼び出す前に、必要に応じてself.querysetを変更するには、カスタムフィールドのクリーン()メソッドをオーバーライドする場合は、比較的きれいにこのエッジケースを扱うことができるようです。

+0

まさに私が探していたもの。ありがとう! – Chantz

関連する問題