ああ、見て、私は一人でそれをすべて解決しました...後者のオプションは、特定のフィールドで検証ルーチンを見つけて呼び出すよりもはるかに簡単です。エラーをつぶすのがはるかに簡単です:
潜在的に必要なすべてのフィールドを設定してから、他のフィールドの値をテストし、必要に応じてエラーを削除しrequired=True
ますform.clean()
self.errors
# payment type
payment_method = forms.CharField(max_length="20", required=True)
payment_method.widget=forms.RadioSelect(choices=PAYMENT_METHOD_CHOICES)
# credit card details
cc_number = CreditCardField(max_length=20, required=True)
cc_name = forms.CharField(max_length=30, required=True)
cc_expiry = ExpiryDateField(required=True)
cc_ccv = VerificationValueField(required=True)
def clean(self):
data = super(PaymentForm, self).clean()
if data.get('payment_method') == 'paypal':
for field_name in ['cc_number','cc_name','cc_expiry','cc_ccv']:
if field_name in self.errors:
del self.errors[field_name]