2010-05-11 3 views
3

Я создал подробную форму в Django, имеющую некоторые обязательные поля. Я хочу сохранить страницу как вариант проекта без исключения, если обязательные поля не установлены в это время. Как мне это сделать?Как сохранить страницу как черновик

ответ

2

Первый набор required = False для полей, которые не нужно устанавливать, если вы сохраняете как черновик. Затем в свою форму добавьте поле типа 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] 

Добавить этот метод в форму и использовать его в чистом методе формы, чтобы проверить свои поля. Это будет выглядеть следующим образом:

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 вместо флажка, то вы должны изменить свой вид и передать некоторые параметры в конструктор вашей формы в зависимости от щелкнул ли пользователь кнопку save_as_draft или просто кнопку сохранения. В конструкторе формы сохраните это состояние aa self.save_as_draft и используйте его в методе Form.clean, чтобы проверить, сохраняется ли черновик или нет.

Привет, Лукаш

+2

Используя этот подход, вы должны сделать все модели поля обнуляемым, что не очень хорошо –

Смежные вопросы