Как сохранить страницу как черновик - PullRequest
3 голосов
/ 11 мая 2010

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

1 Ответ

2 голосов
/ 19 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...