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

中所写