Django Rest Framework render_form и обязательные поля

При использовании средства визуализации HTML-форм в DRF, может ли кто-нибудь придумать хороший способ автоматически сгенерировать некоторое указание на «обязательное» поле в DRF всеми правдами и неправдами? Я имею в виду, что перед отправкой формы какое-то указание на поле, которое требуется - Browsable API покажет прямо в форме, что это за ошибка, но только после отправки.

Использую ли я метод, как показано здесь, для просматриваемого API с HTML-формами на уровне поля (вместо простой формы / JSON):

django-rest-framework - автогенерация формы в доступном для просмотра API?

Или я использую TemplateHTMLRenderer с вызовом render_form, как описано здесь:

http://www.django-rest-framework.org/topics/html-and-forms/#rendering-forms

Я не вижу простого способа сделать так, чтобы мои обязательные поля отображались в соответствии с требованиями. Так скажем, у нас есть, как

#models.py
class Foobar(model.Models):
  foo = models.CharField(max_length=100, blank=True, default='')
  bar = models.CharField(max_length=100, blank=False)

Лучшее, что я могу придумать, это создать свой собственный шаблон/фрагмент для каждого типа поля "required-text-field.html", "required-checkbox.html" и т. д. и использовать объявление стиля в сериализаторе, как показано здесь:

http://www.django-rest-framework.org/topics/html-and-forms/#field-styles

Это при условии, что я понимаю это, еще не играл с этим, чтобы увидеть.

Но мне бы хотелось увидеть способ автоматического создания поля с обязательным флагом или без него (даже просто со звездочкой или с применением класса CSS) на основе определения модели.

Rambling: Цель здесь состояла в том, чтобы избежать написания моих собственных форм, чтобы DRF генерировал форму для меня в пользовательских представлениях. В отличие от написания собственных форм с использованием AJAX, я решил, что шаблонов, render_form и некоторых проверок формата будет достаточно. Но теперь я думаю, что DRF создан для серверной части и разработки, а не для интерфейса, и, может быть, мне следует запланировать написать свои собственные формы, если они будут видны конечному пользователю? Также я мог бы иметь файлы CSS и выбирать на основе имени, вызывая render_form, а затем применяя ручные стили, было бы меньше работы, чем HTML + CSS. Должен ли я просматривать формы Django (просто Django, а не DRF) и повторно использовать сериализатор для проверки?...


person Rick    schedule 20.05.2016    source источник


Ответы (1)


Я вижу 2 пути:

вы можете определить свой собственный пакет шаблонов, посмотреть существующие в источниках (например, 'rest_framework/horizontal/input.html') - вы можете проверить, требуется ли поле, и в соответствии с этим флагом установить какой-нибудь css. вам не нужно ничего лишнего, особенно "input-readonly.html" - просто сделайте свою копию input.html, добавьте несколько if-ов и все заработает.

или вы можете вызвать OPTIONS в конечной точке API, чтобы получить всю необходимую информацию о полях, не только required, но readonly и допустимых значениях для некоторых выборок - это если вы можете обновить свои формы из javascript

person Jerzyk    schedule 04.06.2016
comment
Первый способ мне почему-то не понравился, когда я его читал, но сегодня думаю попробовать. Я думаю, что form.field.required будет работать, но нужно будет проверить... В любом случае, это звучит как меньше работы, чем я себе представлял. Мне также нравится идея OPTIONS, и я думаю, что это путь к доступу к Android/iOS (также с использованием токенов для этой цели). - person Rick; 10.06.2016