3

Inlines クラスのフィールドの選択を変更するにはどうすればよいですか? インラインで formfield_for_choice_field を使用できないので、何を使用すればよいですか? リクエストを渡す必要があるため、管理者で生成する必要があります。

4

3 に答える 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 に答える