2010-05-11 6 views
3

Django에서 몇 가지 필수 입력란이있는 세부 양식을 만들었습니다. 해당 입력란에 필수 입력란이 설정되지 않은 경우 예외없이 초안 옵션으로 페이지를 저장하고 싶습니다. 내가 어떻게 해?초안으로 페이지를 저장하는 방법

답변

2

초안으로 저장하는 경우 설정할 필요가없는 입력란에는 첫 번째 필수 = 거짓이 설정됩니다. 그런 다음 양식에 'save_as_draft'와 같은 필드를 추가하십시오. 이는 부울입니다. 이제 save_as_draft 필드의 상태 (사용자가이 필드를 선택했는지 여부)에 따라이 필드의 유효성을 검사하는 메소드가 필요합니다.

def is_provided(self, field): 
     value = self.cleaned_data.get(field, None) 
     if value == None or value == '': 
      self._errors[field] = ErrorList([u'This field is required.']) 
      if field in self.cleaned_data: 
       del self.cleaned_data[field] 

이 양식에이 방법을 추가하고 필드의 유효성을 검사하는 형태의 청소 방법을 사용 : 당신은 같은 방법을 사용할 수 있습니다. 이것은 다음과 같을 것이다 : 확인란 대신 save_as_draft 버튼을 선호

def clean(self): 
    draft = self.cleaned_data.get('save_as_draft', False) 
    if not draft: 
     # User doesn't save a draft so we need to check if required fields are provided 
     req_fields = ['field1', 'field2', 'field3'] 
     for f in req_field: 
      self.is_provided(f) 

return self.cleaned_data 

사용자의 경우에, 당신이보기를 수정하고 사용자가 save_as_draft 버튼을 클릭하거나 버튼을 저장 여부에 따라 양식의 생성자에 어떤 매개 변수를 전달해야합니다. Form 생성자에서이 상태를 self.save_as_draft로 저장하고 Form.clean 메서드에서 이것을 사용하여 초안을 저장하고 있는지 확인합니다.

인사말, 루카스

+2

이 방법을 사용하면 좋지 않다하는 null 모든 모델 필드를 확인해야합니다 –

관련 문제