シナリオ:注文フォームを作成しています。地球上の他のすべての注文フォームと同様に、個別の請求先配送先住所があります。ユーザーが時間を節約できるように、[請求先住所を使用する]チェックボックスを追加しました。
問題は、出荷フィールドがまだそこにあるということです。ユーザーが配送先住所データを入力しない場合(請求先住所を使用する場合など)、検証に失敗します。
これらの重複フィールドのModelForm検証をオーバーライドしたいと思います。そこで、チェックボックスがオンになっている場合(バリデーター内からそのデータを取得する方法がわからない場合)、請求バージョンを返します。チェックされていない場合は、元の検証に戻します。
計画のようですね。さて、私は最初のハードルに落ちました。私clean_functions
は働いていません。彼らが呼ばれているようにも見えません。
ここにいくつかのコードがあります:
# shipping_street is a field in my Order Model
class OrderForm(ModelForm):
class Meta:
model = Order
def clean_shipping_street(self):
print "JUST GET ME SOME OUTPUT!!!"
raise forms.ValidationError('RAWRAWR')
これが私がテストしている方法です:
def checkout(request):
of = OrderForm()
if request.method == "POST":
of = OrderForm(request.POST)
print 'Form valid:', of.is_valid()
# ...
# return my HttpResponse with 'of' in the context.