Виджет формы модели Django не отрисовывается
Framework - Django. Я пытаюсь создать контактную форму с атрибутами поля ввода. У меня проблема с первым полем «имя». Поля со второго по четвертое отлично отображаются в html. Вот мой models.py:
from django.db import models
class md_contactalpha(models.Model):
name = models.CharField(max_length=100, verbose_name='Name',null=False, blank=False )
email=models.EmailField(max_length=100,verbose_name='Email',
unique=True,null=False,blank=False)
phone = models.CharField( max_length=15, verbose_name='Phone',null=True,blank=True)
message = models.CharField(max_length=512,verbose_name='Message', null=True,
blank=True, )
def __str__(self):
return self.name
Вот файл forms.py:
from django import forms
from .models import md_contactalpha
class fm_contactalpha(forms.ModelForm):
class Meta:
model = md_contactalpha
fields = ('name', 'email', 'phone', 'message')
widgets = {
'name':forms.TextInput(attrs={'class':'input_text', 'placeholder': 'Full Name'}),
'email':forms.EmailInput(attrs={'class':'input_text'}),
'phone':forms.TextInput(attrs={'class':'input_text'}),
'message':forms.Textarea(attrs={'class':'message_box','rows':5}),
}
Вот html-файл:
<form method="post">
{% csrf_token %}
<form method="POST">
{{ form.as_p }}
</form>
<button type="submit">Send Message</button>
Как уже говорилось, последние 3 поля работают отлично. Поле «имя» не заполняется из виджета и выдает следующее -
<input type="" class= placeholder="Name" name="Name">
<django.forms.fields.CharField object at 0x7fb2ea920ce0>
Я проверил другие сообщения на тему виджетов, но, похоже, нет ответа на вопрос, почему одно поле с названием name должно иметь проблему. Буду очень признателен за любую помощь. Спасибо.
Похоже, что внутренний/внешний тег <form>
не закрыт, что и вызывает такое неожиданное поведение. Попробуйте удалить строку, содержащую второй тег <form method="POST">
.
<form method="post">
{% csrf_token %}
{{ form.as_p }}
</form>
Пожалуйста, обратите внимание :
- Кнопка
submit
должна находиться в теге<form>
, чтобы выполнять отправку формы. Или, как вариант, должна иметь атрибутform="yourFormId"
, чтобы иметь возможность отправить определенную форму (что-то вроде :<button type="submit" form="yourFormID">Send Message</button>
Тег <form>
без атрибутаaction=
будет делать запрос к тому же представлению, в котором была отображена форма. Если это не то, что вы ожидаете - тогда атрибутaction=
должен быть установлен с url процесса представления вашей формы submit.