Django обязательное поле в модельной форме

У меня есть форма, где несколько полей выходят по мере необходимости, когда я тоже их не хочу. Вот форма от models.py

class CircuitForm(ModelForm): class Meta: model = Circuit exclude = ('lastPaged',) def __init__(self, *args, **kwargs): super(CircuitForm, self).__init__(*args, **kwargs) self.fields['begin'].widget = widgets.AdminSplitDateTime() self.fields['end'].widget = widgets.AdminSplitDateTime() 

В реальной модели схемы поля определяются следующим образом:

 begin = models.DateTimeField('Start Time', null=True, blank=True) end = models.DateTimeField('Stop Time', null=True, blank=True) 

Мой view.py для этого здесь:

 def addCircuitForm(request): if request.method == 'POST': form = CircuitForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect('/sla/all') form = CircuitForm() return render_to_response('sla/add.html', {'form': form}) 

Что я могу сделать, чтобы эти два поля не требовались?

  • Python «setup.py develop»: возможно ли создать папку «.egg-info» не в папке с исходным кодом?
  • Команда cv2.imshow не работает должным образом в opencv-python
  • Python urllib3 и как обрабатывать поддержку файлов cookie?
  • Ошибка установки X X Pillow
  • Запрос базы данных Django: как фильтровать объекты по диапазону дат?
  • Общий метаклас Python для отслеживания подклассов
  • Как изменить каталоги с помощью Paramiko?
  • Не удается обновить matplotlib в Ubuntu 12.04 с установленной Canopy
  • 6 Solutions collect form web for “Django обязательное поле в модельной форме”

    Если вы не хотите изменять пустые настройки для своих полей внутри моделей (это приведет к нарушению нормальной проверки на сайте администратора), вы можете сделать следующее в своем классе Form:

     def __init__(self, *args, **kwargs): super(CircuitForm, self).__init__(*args, **kwargs) for key in self.fields: self.fields[key].required = False 

    Пересмотренный конструктор не повредит никакой функциональности.

    Если поле модели имеет пустое значение = Истина, то в поле формы требуется значение False. В противном случае, обязательно = True

    Здесь говорится: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

    Похоже, вы все делаете правильно. Вы можете проверить значение self.fields['end'].required .

    Это не ответ, но для всех, кто находит это через Google, еще один бит данных: это происходит со мной в модельной форме с DateField. Для этого потребовалось установить значение False, модель имеет значение «null = True, blank = True», и поле в форме показывает required = False, если я смотрю на него во время метода clean (), но он все еще говорит, что мне нужна действительная дата формат. Я не использую специальный виджет, и я получаю сообщение «Ввести действительную дату», даже когда я явно устанавливаю input_formats = ['% Y-% m-% d', '% m /% d /% Y', ' % m /% d /% y ',' '] в поле формы.

    EDIT: Не знаю, поможет ли это кому-либо еще, но я решил проблему, с которой я столкнулся. В нашей форме есть текст по умолчанию в поле (в этом случае слово «в», чтобы указать, что поле является конечной датой, поле называется «end_time»). Я специально искал слово «to» в методе clean () формы (я также пробовал метод clean_end_time (), но он никогда не вызывался) и установил значение переменной clean_data равным None, как это предлагается в этом Django билет . Однако ничто из этого не имело значения (я полагаю), валидация модели уже искала недопустимый формат даты «до», не давая мне возможности перехватить его.

    Развернувшись на ответе DataGreed, я создал Mixin, который позволяет вам указать переменную fields_required в Meta классе следующим образом:

     class MyForm(RequiredFieldsMixin, ModelForm): class Meta: model = MyModel fields = ['field1', 'field2'] fields_required = ['field1'] 

    Вот:

     class RequiredFieldsMixin(): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) fields_required = getattr(self.Meta, 'fields_required', None) if fields_required: for key in self.fields: if key not in fields_required: self.fields[key].required = False 

    Это ошибка при использовании виджетов:

    Обходной путь: использование виджетов времени / даты Django в пользовательской форме

    или билет 12303

    Из документации поля модели ,

    Если у вас есть модель, как показано ниже,

     class Article(models.Model): headline = models.CharField( max_length=200, null=True, blank=True, help_text='Use puns liberally', ) content = models.TextField() 

    Вы можете изменить валидность формы заголовка на required=True вместо blank=False как и для модели, как определение поля, как показано ниже.

     class ArticleForm(ModelForm): headline = MyFormField( max_length=200, required=False, help_text='Use puns liberally', ) class Meta: model = Article fields = ['headline', 'content'] 

    Поэтому, отвечая на вопрос,

     class CircuitForm(ModelForm): begin = forms.DateTimeField(required=False) end = forms.DateTimeField(required=False) class Meta: model = Circuit exclude = ('lastPaged',) 

    это делает begin и end required=False

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