Django Validation работает в админке django, но не работает в html шаблоне
Я создаю форму, где при регистрации она должна сохранять данные в базу данных, если форма действительна. в противном случае она должна выдать ошибку, но не сохраняет данные в базу данных, а также некоторые поля являются обязательными, но если я отправляю форму, она даже не выдает ошибку "поле обязательно". но если я регистрирую ее вручную на канале администратора Django, она работает совершенно нормально.
вот моя модель:
class foodlancer(models.Model):
Your_Name = models.CharField(max_length=50)
Kitchen_Name = models.CharField(max_length=50)
Email_Address = models.EmailField(max_length=50)
Street_Address = models.CharField(max_length=50)
City = models.CharField(max_length=5)
phone = PhoneNumberField(null=False, blank=False, unique=True)
def __str__(self):
return f'{self.Your_Name}'
также, я отключил html5 валидацию
forms.py
class FoodlancerRegistration(forms.ModelForm):
phone = forms.CharField(widget=PhoneNumberPrefixWidget(initial="US"))
class Meta:
model = foodlancer
fields = "__all__"
views.py:
def apply_foodlancer(request):
form = FoodlancerRegistration()
return render(request, 'appy_foodlancer.html', {"form": form})
и, наконец, шаблон Django
<form method="POST" novalidate>
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="cta-btn cta-btn-primary">Submit</button>
</form>
Спасибо за ваше время/помощь
У вас нет логики сохранения формы в представлении. Попробуйте сделать что-то вроде этого:
def apply_foodlancer(request):
if request.method == 'POST':
form = FoodlancerRegistration(data=request.POST)
if form.is_valid(): # if it's not valid, error messages are shown in the form
form.save()
# redirect to some successpage or so
return HttpResponse("<h1>Success!</h1>")
else:
# make sure to present a new form when called with GET
form = FoodlancerRegistration()
return render(request, 'appy_foodlancer.html', {"form": form})
Также проверьте, что метод вашей формы в HTML-файле - post
. Я не уверен, что POST
также работает.
Избегайте определения полей в модельной форме с помощью __all__
. Это менее безопасно, как написано в docs