#python #django #django-models #django-views #django-forms
#python #django #django-models #django-просмотры #django-forms
Вопрос:
Я создаю форму, в которой, если мы зарегистрируемся, она должна сохранять данные в базе данных, если форма действительна. в противном случае это должно вызвать ошибку, но данные не сохраняются в базе данных, а также требуются некоторые поля, но если я отправляю форму, она даже не вызывает поле ошибки. требуется. но если я зарегистрирую его вручную на панели администратора 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>
Спасибо за ваше время / помощь
Ответ №1:
В вашем представлении нет никакой логики сохранения формы. Попробуйте что-то вроде этого:
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
это тоже работает.
Избегайте определения полей в modelform с __all__
помощью . Это менее безопасно, как написано в документах