Проверка формы Django: создание «обязательного» условного?

Я новичок в Django (и Python), и я пытаюсь выяснить, как условно определить некоторые аспекты проверки формы. В этом случае для приложения есть интерфейс HTML, в котором пользователь может выбрать дату и время из виджетов. clean метод на объекте формы принимает значения полей времени и даты и возвращает их обратно в дату и время.

В дополнение к интерфейсу HTML есть и клиент iPhone, делающий вызовы в приложении, и я хотел бы передать значение времени в стиле времени в UNIX.

Мой код формы выглядит следующим образом:

 class FooForm(forms.ModelForm): foo_date = forms.CharField(required=True, widget=forms.RadioSelect(choices=DATE_CHOICES)) foo_time = forms.CharField(required=True, widget=SelectTimeWidget()) foo_timestamp = forms.CharField(required=False) 

Как мне foo_date и foo_time если не предусмотрено foo_timestamp ?

  • FSharp запускает мой алгоритм медленнее, чем Python
  • Функция измерения времени Python
  • Обнаружить объект re (regexp) в Python
  • Как установить / найти аргумент ca_certs в python ssl.wrap_socket ()
  • Общий отказ сервера SOCKS при переключении с использованием стебля
  • Как представить файл jar в виде сетевого графика?
  • использовать slugify в шаблоне
  • В пандах, как вычислить «Countif» на основе движущегося окна?
  • 2 Solutions collect form web for “Проверка формы Django: создание «обязательного» условного?”

    Это делается с помощью clean метода в форме. Вам нужно установить foo_date и foo_time на required=False , хотя, поскольку clean вызывается только после проверки каждого поля (см. Также документацию ).

     class FooForm(forms.Form) # your field definitions def clean(self): data = self.cleaned_data if data.get('foo_timestamp', None) or (data.get('foo_date', None) and data.get('foo_time', None)): return data else: raise forms.ValidationError('Provide either a date and time or a timestamp') 

    Я нашел себе «стандартный» способ сделать это, так как мои формы имеют несколько условно обязательных полей. Поэтому я создал суперкласс со следующим методом:

     def validate_required_field(self, cleaned_data, field_name, message="This field is required"): if(field_name in cleaned_data and cleaned_data[field_name] is None): self._errors[field_name] = self.error_class([message]) del cleaned_data[field_name] 

    И тогда в моем чистом методе формы у меня есть:

     def clean(self): cleaned_data = super(FormClass, self).clean() if(condition): self.validate_required_field(cleaned_data, 'field_name') 

    До сих пор это отлично работало.

    Python - лучший язык программирования в мире.