为什么表单不显示字段错误并提交空白或无效的表单?
Why the form doesn't show field errors and submits the form blank or invalid?
我正在创建一个表单,其中的字段具有正则表达式验证器。但是当我提交空白表单时,它不会提示用户输入必填字段或验证错误。它只是将用户重定向到 /data/ 的“ValueError”
无法创建 InitialData,因为数据未验证。'
回溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/data/
Django Version: 3.2.4
Python Version: 3.9.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'account']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\ceo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\ceo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\Sonu\Projects\Billing\rough\account\views.py", line 10, in initialview
fm.save()
File "C:\Users\ceo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\forms\models.py", line 460, in save
raise ValueError(
Exception Type: ValueError at /data/
Exception Value: The InitialData could not be created because the data didn't validate.
models.py:
from django.db import models
from django.core.validators import RegexValidator
# Create your models here.
class InitialData(models.Model):
pattern = RegexValidator(r'OOPL\/D\/[0-9]', 'Enter Case Number properly!')
case_number=models.CharField(max_length=12, blank=False, primary_key=True, validators=[pattern])
forms.py:
from django import forms
from django.forms import ModelForm, fields
from .models import InitialData
class TrackReportForm(forms.ModelForm):
class Meta:
model=InitialData
fields='__all__'
views.py:
from django.shortcuts import render
from .forms import TrackReportForm
from .models import InitialData
# Create your views here.
def initialview(request):
if request.method=='POST':
fm=TrackReportForm(request.POST)
if fm.is_valid:
fm.save()
return render(request, 'account/database.html', {'form':fm})
else:
fm=TrackReportForm()
return render(request, 'account/database.html', {'form':fm})
database.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{{form}} {{field.errors}}
<input type="submit" value="Submit">
</form>
</body>
</html>
网址:
from django.contrib import admin
from django.urls import path
from account import views
urlpatterns = [
path('admin/', admin.site.urls),
path('data/', views.initialview),
]
我哪里错了?
您需要更改:
if fm.is_valid:
fm.save()
到括号下面的代码()
:
if fm.is_valid():
fm.save()
请参阅文档 here is_valid()
。
我正在创建一个表单,其中的字段具有正则表达式验证器。但是当我提交空白表单时,它不会提示用户输入必填字段或验证错误。它只是将用户重定向到 /data/ 的“ValueError” 无法创建 InitialData,因为数据未验证。'
回溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/data/
Django Version: 3.2.4
Python Version: 3.9.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'account']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\ceo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\ceo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "E:\Sonu\Projects\Billing\rough\account\views.py", line 10, in initialview
fm.save()
File "C:\Users\ceo\AppData\Local\Programs\Python\Python39\lib\site-packages\django\forms\models.py", line 460, in save
raise ValueError(
Exception Type: ValueError at /data/
Exception Value: The InitialData could not be created because the data didn't validate.
models.py:
from django.db import models
from django.core.validators import RegexValidator
# Create your models here.
class InitialData(models.Model):
pattern = RegexValidator(r'OOPL\/D\/[0-9]', 'Enter Case Number properly!')
case_number=models.CharField(max_length=12, blank=False, primary_key=True, validators=[pattern])
forms.py:
from django import forms
from django.forms import ModelForm, fields
from .models import InitialData
class TrackReportForm(forms.ModelForm):
class Meta:
model=InitialData
fields='__all__'
views.py:
from django.shortcuts import render
from .forms import TrackReportForm
from .models import InitialData
# Create your views here.
def initialview(request):
if request.method=='POST':
fm=TrackReportForm(request.POST)
if fm.is_valid:
fm.save()
return render(request, 'account/database.html', {'form':fm})
else:
fm=TrackReportForm()
return render(request, 'account/database.html', {'form':fm})
database.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="" method="post" novalidate>
{% csrf_token %}
{{form}} {{field.errors}}
<input type="submit" value="Submit">
</form>
</body>
</html>
网址:
from django.contrib import admin
from django.urls import path
from account import views
urlpatterns = [
path('admin/', admin.site.urls),
path('data/', views.initialview),
]
我哪里错了?
您需要更改:
if fm.is_valid:
fm.save()
到括号下面的代码()
:
if fm.is_valid():
fm.save()
请参阅文档 here is_valid()
。