Django 验证正在 django admin 上工作,但不在 html 模板上工作
Django Validation is working on django admin but not working on html template
我正在创建一个表单,如果我们注册它应该在表单有效的情况下将数据保存到数据库中。否则,它应该引发错误,但它不会将数据保存到数据库中,并且还需要一些字段,但如果我提交表单,它甚至不会引发错误字段是必需的。但如果我在 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>
感谢您的time/help
您的视图中没有任何表单保存逻辑。
尝试这样的事情:
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
中所写
我正在创建一个表单,如果我们注册它应该在表单有效的情况下将数据保存到数据库中。否则,它应该引发错误,但它不会将数据保存到数据库中,并且还需要一些字段,但如果我提交表单,它甚至不会引发错误字段是必需的。但如果我在 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>
感谢您的time/help
您的视图中没有任何表单保存逻辑。 尝试这样的事情:
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