Inlines クラスのフィールドの選択を変更するにはどうすればよいですか? インラインで formfield_for_choice_field を使用できないので、何を使用すればよいですか? リクエストを渡す必要があるため、管理者で生成する必要があります。
質問する
2774 次
3 に答える
5
フィールドがchoices属性を持つIntegerFieldまたはCharfieldの場合、インラインクラスのformfield_for_choice_fieldメソッドを次のようにオーバーライドできます。
class YourInline(admin.StackedInline): # or TabularInline
model = YourModelName
def formfield_for_choice_field(self, db_field, request=None, **kwargs):
if db_field.name == 'YOUR_FIELD_NAME':
kwargs['choices'] = (('', '---------'), ('1', 'Choice1'), ('2', 'Choice2'))
return db_field.formfield(**kwargs)
幸運を
于 2012-04-18T16:43:19.030 に答える
1
私はeos87の答えに同意します。ただし、これは部分的な解決策にすぎません。元のモデルの選択が検証に使用されているため、保存時に検証エラーが発生します。この問題を解決するには、この関数もモデルに追加します。
def clean_fields(self, exclude=None):
exclude.append('YOUR_FIELD_NAME') # we will do our own validation on this field
super(YOUR_MODEL, self).clean_fields(exclude = exclude)
value = self.YOUR_FIELD_NAME
if value and not self.validChoice(value):
msg = 'Select a valid choice. %s is not one of the available choices.'
errors = {''YOUR_FIELD_NAME'': ([msg % value])}
raise ValidationError(errors)
def validChoice(self, value):
# add your validation code here
于 2014-10-08T16:17:23.517 に答える