【发布时间】:2021-06-23 08:47:12
【问题描述】:
我使用 IntegerField 创建表单。是否有可能从定义的列表中验证其上的输入值?
这是一个 API 表单,它连接到另一个数据库。它不是基于项目中的模型。
我的表格是这样的:
from django.core.exceptions import ValidationError
def validate_users(value):
users_list = [10012, 16115, 10505]
if value not in users_list:
raise ValidationError('Wrong number')
class PribilagesForm(forms.Form):
mslk_module_choices = (('1', 'one'),
('2', 'two'),)
workerId = forms.IntegerField(label='Nr. ewidencyjny', validators=[validate_users])
moduleName = forms.ChoiceField(label='Moduł', choices=mslk_module_choices)
当我从 validate_users 范围外输入值并提交表单时,我得到了 ValueError,而不是有关错误插入值的信息。
查看:
class TestFormPrivilegesView(TemplateView):
template_name = "SLK_WS_app/SLK/test.html"
def get(self, request):
form = PribilagesForm()
return render(request, self.template_name, {'form':form})
def post(self,request, **kwargs):
form = PribilagesForm(request.POST)
if form.is_valid():
workerId = form.cleaned_data['workerId']
moduleName = form.cleaned_data['moduleName']
# args = {'form': form, 'workerId':workerId, 'moduleName': moduleName, }
request_data = {'workerId': workerId,
'moduleName': moduleName}
context = super().get_context_data(**kwargs)
client = zeep.Client(wsdl=ws_source_slk_web_service)
find_privileges = client.service.FindUserModulePermission(**request_data)
data_find_privileges = find_privileges['usersModulesPermissions']['UserModulePermissionData']
privileges_list = []
privileges_data = namedtuple('FindUserModulePermission', ['workerId',
'workerFullName',
'moduleName',
'modifyDate',
'deleted',
]
)
for element in data_find_privileges:
privileges_list.append(privileges_data(element['workerId'],
element['workerFullName'],
element['moduleName'],
element['modifyDate'],
element['deleted'],
)
)
context['privileges_list'] = privileges_list
context['Date_time'] = datetime.datetime.today()
context['form'] = PribilagesForm()
return render(request, self.template_name, context)
render(request, self.template_name, context={'form': PribilagesForm()})```
【问题讨论】:
-
你能分享完整的错误堆栈跟踪吗?
-
异常类型:ValueError 异常值:视图 SLK_WS_app.views.TestFormPrivilegesView 未返回 HttpResponse 对象。它返回 None 。
-
@PawełDawicki:分享您的视图代码,错误不在表单中,而是在使用此表单的视图中。
-
在“编号”中插入值。 ewidencyjny' 作为参数传输到 API,但未经验证的视图我将插入到问题中,因为很长