Django表单验证失败



我有这个表单,我正在传递一个参数来禁用或启用基于某些用户单击特定超链接的字段。

/p>

path("update-request/<str:pk>/", update_request, name="update_request"),
path("update-request/<str:pk>/<str:action>", update_request, name="update_request"),

views.py

def create_new_request(request, action=None):
description_form = DescriptionForm(action=action)

forms.py

class DescriptionForm(forms.ModelForm):
prefix = "description"
....

def __init__(self, action=None, *args, **kwargs):
super(DescriptionForm, self).__init__(*args, **kwargs)
print(action)

超链接示例:新请求

当我想将数据保存到数据库时,我的问题开始了,即使数据在其中,我也得到所有字段显示为所需。从DescriptionForm中删除action.init停止这个问题,我如何规避这个问题?我需要在init中添加action的原因是,如果满足条件,我需要启用或禁用字段。

def __init__(self, action=None, *args, **kwargs):
super(DescriptionForm, self).__init__(*args, **kwargs)
if action == "new_request" or "review":
for field in self.fields:
self.fields[field].disabled=True
我的错误是这样的:标题
This field is required.
category
This field is required.
job_description
This field is required.
urgent_request
This field is required.
detailed_job_description
This field is required.

我认为你可以通过表单传递对象的实例来解决这个问题。这样的:

def create_new_request(request, pk, action=None):
description = Description.objects.get(pk=pk)
description_form = DescriptionForm(action, instance=description)

并同时更新表单:

def __init__(self, action=None, *args, **kwargs):
super(DescriptionForm, self).__init__(*args, **kwargs)
if action in ["new_request","review"] and self.instance:
# rest of the code

即使一个字段被禁用,也不意味着它不需要数据。如果不能提供数据,那么最好删除如下字段:

for field in self.fields:
del self.fields[field]

或提供虚拟数据用于验证。

最新更新