#python #django #forms
#python #django #формы
Вопрос:
Допустим, у меня есть следующие две модели Django.
class FruitBasket(models.Model):
apple = models.CharField()
strawberry = models.CharField()
class VegetableGarden(models.Model):
celery = models.CharField()
turnip = models.CharField()
Если я хочу создать одно представление для пользователя, чтобы создать как a FruitBasket
, так и a VegetableGarden
в одной и той же форме, я могу создать по одному ModelForm
для каждого и передать их в мое представление следующим образом:
<form action="" method="post">
{% csrf_token %}
{{ fruit_form.as_p }}
{{ vegetable_form.as_p }}
<input type="submit" value="Submit" />
</form>
Это позволит пользователю вводить поля яблока, клубники, сельдерея и репы в таком порядке.
Что, если вместо этого я хотел отобразить поля в порядке репа, клубника, сельдерей, а затем яблоко? Я хочу избежать написания совершенно нового Form
класса, поскольку мне пришлось бы дублировать все проверки ( clean
функции). Есть ли способ произвольно определять порядок полей при объединении двух форм?
Ответ №1:
{{ form.as_p }}
это всего лишь один из многих способов отображения формы. Вы можете вывести виджет каждого отдельного поля, используя {{ form.name_of_field }}
синтаксис:
<form action="" method="post">
{% csrf_token %}
{{ vegetable_form.turnip }}
{{ fruit_form.strawberry }}
{{ vegetable_form.celery }}
{{ fruit_form.apple }}
<input type="submit" value="Submit" />
</form>
Обратите внимание, что при этом не будут отображаться ошибки. Отдельные сообщения об ошибках доступны в разделе {{ form.name_of_field.errors }}
, и вы можете получить доступ к сообщениям об ошибках форм, используя {{ form.errors }}
.
Взгляните на настройку шаблона формы для получения дополнительной информации по этому вопросу.
Комментарии:
1. Спасибо! Это именно то, что я хотел.