Проверка Django работает с администратором django, но не работает с шаблоном html

#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__ помощью . Это менее безопасно, как написано в документах