1

Djangoのドキュメント(http://docs.djangoproject.com/en/dev/ref/forms/fields/)には、clean()メソッドとそのinit()メソッドはコア引数(required、label、initial、widget、help_text)を受け入れます。

次のDjangoSnippetのコードを使用しようとしていました: http ://djangosnippets.org/snippets/907/ クレジットカードフィールドを実装しましたが、必須ではありません。required = falseを設定すると、通常のフィールドでは問題なく機能しますが、このスニペットのサブクラス化されたフィールドでは機能しません。欠落しているスニペットは何ですか?(init()メソッドが欠落しているか、Djangoのドキュメントに記載されているコア引数を受け入れていないと思いますが、これを修正する方法がわかりません。)

たとえば、これらのカスタムフィールドでfalseに設定する必要がありますが、フォームには引き続き次のものが必要です。

CC_number = CreditCardField(required=False)
CC_expiration_date = CCExpField(required=False)

フォームはこのフィールドを必要としません(期待どおりに機能します):

CC_security_code = forms.IntegerField(required=False)

ご協力いただきありがとうございます!

4

1 に答える 1

1

CreditCardFieldこれは、 (メソッドの最初の2行)のcleanメソッドを変更することで機能するはずです。

def clean(self, value):
    if not value and not self.required:
        return value
    """Check if given CC number is valid and one of the
       card types we accept"""
    if value and (len(value) < 13 or len(value) > 16):
        raise forms.ValidationError("Please enter in a valid "+\
                "credit card number.")
    elif self.get_cc_type(value) not in ("Visa", "MasterCard",
                                             "American Express"):
        raise forms.ValidationError("Please enter in a Visa, "+\
            "Master Card, or American Express credit card number.")
    return super(CreditCardField, self).clean(value)
于 2011-04-21T21:43:28.997 に答える