BooleanField против CharField в моделях Django

#python #html #django #django-models #django-forms

#python #HTML #django #django-модели #django-формы

Вопрос:

В моей модели приложения у меня есть BooleanField :

 campaign = models.BooleanField(default=False, db_index=True,
    verbose_name=_('processed'), help_text=_('Campaign or not ?'))
  

Я использую это, чтобы различать две вещи. Итак, я подумал о том, чтобы отправить это значение как скрытое из html-формы:

 <input type="hidden" name="campaign" value="True or False" />
  

но кажется, что формы отправляют строки, и я хочу преобразовать эту строку в Boolean . Конечно, я могу переписать модель, сделать ее CharField со default='True or False' значением, но это не кажется очень элегантным.

Есть ли более джангойский способ сделать это?

Ответ №1:

формы отправляют строки, и я хочу преобразовать эту строку в логическое значение.

Все данные в запросе.POST поставляется в виде строк или списков строк. Вам нужно преобразовать его самостоятельно или использовать django forms (предпочтительно), которые сделают всю работу за вас.

С помощью django forms вы можете заменить виджет при запуске форм.Логическое поле, подобное этому:

 class MyForm(forms.ModelForm):

    campaign = forms.BooleanField(widget=forms.HiddenInput())
  

Дополнительная информация о формах django

Комментарии:

1. Извините, но я не понимаю. Если я сделаю это переопределение, примет ли оно <тип ввода =»скрытое» имя =»campaign» значение = «True или False» />, которое в основном является строкой, из моей html-формы?

2. Я обновил свой ответ. По сути, формы django выполняют преобразование за вас, поэтому вам не нужно беспокоиться об этом. Это также позволяет вам писать свои собственные правила преобразования.

3. django может помочь вам сгенерировать html для ваших форм. смотрите ссылку на документ в сообщении выше

4. спасибо за ваш ответ, я попробую его после прочтения документов forms 🙂