시나리오 : 주문 양식을 작성 중입니다. 행성의 다른 모든 주문 양식과 마찬가지로, 별도의 인보이스 발송 주소가 있습니다. 방금 사용자가 시간을 절약 할 수 있도록 '청구서 수신 주소 사용'확인란을 추가했습니다.부울 필드가 설정된 경우에만 특정 필드의 유효성을 검사하십시오.
문제는 배송지가 계속 표시된다는 것입니다. 사용자가 청구서 수신 주소를 사용하려는 경우와 같이 배송 주소 데이터를 입력하지 않으면 유효성 검사가 실패합니다.
나는이 중복 필드에 대한 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')
이야 : 난 그냥 clutz되고 있지만, 가공 한 다음 (그리고 경우
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.
이것이 내가하는 방법입니다. 어쩌면 최고는 아니지만 맞춤 청소 방법이 아마도 가장 쉽습니다. –
'clean_'메소드는 특정 순서로 호출되지 않으므로 위의 경우'ship_to_billing'이'cleaned_data'에 아직 설정되지 않았을 수 있습니다. 일반적으로 여러분의 clean 메소드가 폼에있는 하나 이상의 아이템에 의존한다면, 평범한'clean' 메소드를 사용하십시오. –
그 생각에 대해 닉. self.cleaned_data [ 'field_name']'을 호출하는 대신'self.clean_field_name()'을 호출한다. - 이렇게하면 사용자 정의 정리에 지저분한 순환 종속성이없는 한 결과가 보장된다. CPU에 대한 작업이 조금 더 많지만 항상 작동해야합니다. – Oli