Python Django表单验证:不支持从dict到Decimal的/student/home转换中的TypeError
我的模型中有一个十进制字段Python Django表单验证:不支持从dict到Decimal的/student/home转换中的TypeError,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我的模型中有一个十进制字段 current_CGPA = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=4) 我正在使用Modelform验证我的表单 class StudentAcademicsForm(ModelForm): class Meta: model = Student fields = ['current_CGPA'] 我使用自定义模板进行表单渲
current_CGPA = models.DecimalField(blank=True,null=True,decimal_places=2,max_digits=4)
我正在使用Modelform验证我的表单
class StudentAcademicsForm(ModelForm):
class Meta:
model = Student
fields = ['current_CGPA']
我使用自定义模板进行表单渲染
<label class="form-label" for="current_CGPA">CGPA upto previous semester</label>
<input class="form-control" type="number" step="0.01" placeholder="CGPA" id="current_CGPA" name="current_CGPA" {% if student.current_CGPA is not None %}value="{{student.current_CGPA}}"{% endif %} required min=0 max=10/>
{{form.current_CGPA.errors}}
出现以下错误:
TypeError at /student/home
conversion from dict to Decimal is not supported
在查看stacktrace时,我发现我的字段“current\u CGPA”上的get\u attr()
方法以以下格式返回POST的所有属性
{
“当前CGPA”:3,。。。
}
我认为它应该只返回值“3”
但这是django内置代码完成的
那么这是一只虫子吗?
以前有人用过DecimalField吗?
如果是这样的话,请纠正我,如果我做了什么
Stacktrace如下所示:
Environment:
Request Method: POST
Request URL: http://localhost:8000/student/home
Django Version: 2.0
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'gep_app.apps.GepAppConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'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:
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "/code/gep_project/gep_app/views.py" in student_home
49. if form.is_valid():
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py" in is_valid
179. return self.is_bound and not self.errors
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py" in errors
174. self.full_clean()
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py" in full_clean
378. self._post_clean()
File "/usr/local/lib/python3.7/site-packages/django/forms/models.py" in _post_clean
401. self.instance.full_clean(exclude=exclude, validate_unique=False)
File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py" in full_clean
1144. self.clean_fields(exclude=exclude)
File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py" in clean_fields
1186. setattr(self, f.attname, f.clean(raw_value, self))
File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py" in clean
606. value = self.to_python(value)
File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py" in to_python
1553. return decimal.Decimal(value)
Exception Type: TypeError at /student/home
Exception Value: conversion from dict to Decimal is not supported`
这是StudentAcademicForm的完整代码吗?您是否定义了任何自定义清理方法?找到了解决方案..是的,我在clean_字段方法中写入了我返回的完整数据,这就是问题所在
Environment:
Request Method: POST
Request URL: http://localhost:8000/student/home
Django Version: 2.0
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'gep_app.apps.GepAppConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'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:
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "/code/gep_project/gep_app/views.py" in student_home
49. if form.is_valid():
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py" in is_valid
179. return self.is_bound and not self.errors
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py" in errors
174. self.full_clean()
File "/usr/local/lib/python3.7/site-packages/django/forms/forms.py" in full_clean
378. self._post_clean()
File "/usr/local/lib/python3.7/site-packages/django/forms/models.py" in _post_clean
401. self.instance.full_clean(exclude=exclude, validate_unique=False)
File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py" in full_clean
1144. self.clean_fields(exclude=exclude)
File "/usr/local/lib/python3.7/site-packages/django/db/models/base.py" in clean_fields
1186. setattr(self, f.attname, f.clean(raw_value, self))
File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py" in clean
606. value = self.to_python(value)
File "/usr/local/lib/python3.7/site-packages/django/db/models/fields/__init__.py" in to_python
1553. return decimal.Decimal(value)
Exception Type: TypeError at /student/home
Exception Value: conversion from dict to Decimal is not supported`