0

Django でカスタム フォーム フィールドを作成しようとしています。

class CustomTypedMultipleChoiceField(MultipleChoiceField):
    def __init__(self, *args, **kwargs):
        self.coerce = kwargs.pop('coerce', lambda val: val)
        self.empty_value = kwargs.pop('empty_value', [])
        super(CustomTypedMultipleChoiceField, self).__init__(*args, **kwargs)

    def to_python(self, value):
        """
        Validates that the values are in self.choices and can be coerced to the
        right type.
        """
        value = super(CustomTypedMultipleChoiceField, self).to_python(value)
        if value == self.empty_value or value in self.empty_values:
            return self.empty_value
        new_value = []
        for choice in value:
            try:
                new_value.append(self.coerce(choice))
            except (ValueError, TypeError, ValidationError):
                raise ValidationError(self.error_messages['invalid_choice'] % {'value': choice})
        return new_value

    def validate(self, value):
        if value != self.empty_value:
            super(CustomTypedMultipleChoiceField, self).validate(value)
        elif self.required:
            raise ValidationError(self.error_messages['required'])

エラーCustomTypedMultipleChoiceFieldhas no attributeが表示されますempty_values。これは、組み込みの Django をビルドするのとまったく同じコードですTypedMultipleChoiceField。したがって、このエラーが発生する理由がわかりません。をサブクラス化することも考えましたTypedMultipleChoiceFieldが、そのエラーをto_pythonメソッドで異なるものにして、値を返したくないので、このメソッドを選択しました。私を助けてください。

4

1 に答える 1

1

それがタイプミスなのか、それとも意図したものなのかはわかりませんが、実際にはempty_values(複数形で) はコードのどこにも定義されていません。また、スーパー クラスのソース コードも確認しましたが、MultipleChoiceFieldそこでも定義されていません。

あなたのクラスのスーパー スーパー クラス ( ChoiceField) で見つけたものは、への参照でvalidator.EMPTY_VALUESあり、もちろん大文字です。

ソースコードであなたのものに似ている行は次のとおりです。

if value == self.empty_value or value in validators.EMPTY_VALUES:

コードを詳しく調べて、それが意図したものであるかどうかを確認してください。

お役に立てれば!

于 2013-06-17T02:58:42.753 に答える