2013-11-20 1 views
-1

Как я могу соотнести имя элемента HTML (input) и имя поля формы «Django»?Корреляция имени HTML-элемента с именем поля формы Django

Например, у меня есть HTML-файл:

... 
<input name='some_name'> 
... 

И у меня есть форма Django с поля «Имя»:

class SomeForm(ModelForm): 
    name = forms.CharField() 

Когда я создаю форму, передавать данные в ней и вызывать "is_valid":

form = SomeForm(request.data) 
form.is_valid() 

У меня есть ошибка в поле «name»: «Это поле обязательно». Итак, что я могу сделать, если изменение имени ввода в HTML нежелательно?

+0

Это не выглядит, как вы рендеринга 'SomeForm' в вашем HTML вообще. Вы передали 'SomeForm' в шаблон и отобрали его? –

+0

В этом случае «да», я не выдаю шаблон. Поскольку это не в моем коде и там много JavaScript, я решил, что лучше не трогать HTML и вносить изменения в представления Django. – Andrey

+0

Тогда вам не нужно определять 'SomeForm', поскольку вы его не используете, и поэтому он не может быть действительным. –

ответ

0

Поскольку вы не отформатируете свою форму в шаблоне, вам даже не нужно ее определять.
Это неверно в вашем случае просто потому, что у него нет данных, связанных с ним.
Вы всегда можете получить доступ к данным POST в представлении, как это - request.POST['name']

Docs: https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.POST

0

Они названы как ваши атрибуты модели, поэтому это будет «имя» в вашем случае.
И проверьте, прошел ли request.data, поскольку аргумент 'data' для SomeForm - это правильный путь для вас. Я бы предпочел использовать request.POST.

Другой способ сделать это:
Вы можете передать SomeForm экземпляр для просмотра контекста и визуализации готовой к форме в шаблоне:

def get_context_data(self, **kwargs): 
    # code 
    context['form'] = SomeForm() # with data or not 
    return context 

, а затем в шаблоне:

{{ form }} 

или итерацию через него:

{% for field in form %} 
    {{ field }} 
{% endfor %} 

это всегда способ сделать это и узнать, как django называет ваш вход.

Смежные вопросы