Python 数据中未重新排序修改后的django表单cleand_data do
我想向django表单中提交的数据添加数据 到现在为止,我做过这样的事情:Python 数据中未重新排序修改后的django表单cleand_data do,python,django,django-forms,Python,Django,Django Forms,我想向django表单中提交的数据添加数据 到现在为止,我做过这样的事情: form = NewADServiceAccount(data=request.POST) if form.is_valid(): data=request.POST.copy() if not 'SVC' in data['Account_Name']: data['Account_Name'] = 'SVC_'+data['Account_Name'] form = NewADSer
form = NewADServiceAccount(data=request.POST)
if form.is_valid():
data=request.POST.copy()
if not 'SVC' in data['Account_Name']:
data['Account_Name'] = 'SVC_'+data['Account_Name']
form = NewADServiceAccount(data=data)
这是可行的,但我想在clean
方法中执行此检查,因此我定义:
def clean_Account_Name(self):
data = self.cleaned_data['Account_Name']
if not 'SVC' in self.cleaned_data['Account_Name']:
data = 'SVC' + data
return data
但是,当我使用clean方法运行此代码时,我看到clean_data
与data
不匹配,
并且我的呈现表单不包含正确的帐户名
(例如,其中没有SVC):
data
中的Account\u Name
是呈现为HTML的,如何解决这个问题,以便呈现Account\u Name
fromcleaned\u data
更新:
我找到了另一种方法,但我仍然不确定这是正确的方法:
# inside forms.py
class NewADServiceAccount(NewAccount):
Account_Name = forms.CharField(min_length=3, max_length=21, required=True,
#initial="Please write desired name of "
#+ "this service account.",
help_text="Please write the desired name "
+ "of this account. The prefix 'SVC_' will"
+ " be added to this name",)
def set_prefix(self, prefix='SVC_'):
data = self.data.copy()
data['Account_Name'] = prefix+data['Account_Name']
self.data = data
# in views.py:
if form.is_valid():
form.set_prefix()
第二次更新:
在查看了我的解决方案后,我认为我的clean方法可以更好一些,所以我做了:
def clean_Account_Name(self):
data = self.data.copy()
if not 'SVC' in data['Account_Name']:
data['Account_Name'] = 'SVC' + data['Account_Name']
self.data = data
尽管django文档中说:
无论是否更改,始终返回清理后的数据
所以,现在我很困惑。
我找到了一个解决办法,但我需要重申这是一个有效的好办法。如果有人在这里评论我会很高兴的 如果我知道你一直在尝试使用clean方法。如果我是对的,你就做错了一点。尝试将
def clean()
与表单字段一起使用:
forms.py
views.py
前缀
仅用于表单中。如果我没有弄错的话,prefix
会将表单的每个字段指定为prefix namefield更改self。数据看起来不正确。您应该返回数据
。这不是你想要的吗?@janos,不是。就像我说的,在返回数据时这样做,而不覆盖self.data,是不起作用的。例如,在呈现模板时,我仍然可以看到数据中的值。
def clean_Account_Name(self):
data = self.data.copy()
if not 'SVC' in data['Account_Name']:
data['Account_Name'] = 'SVC' + data['Account_Name']
self.data = data
class AccountNameField(forms.CharField):
def clean(self, value):
value = u'SVC' + value
return value
class NewADServiceAccount(forms.Form):
Account_Name = AccountNameField(min_length=3, max_length=21, required=True,
#initial="Please write desired name of "
#+ "this service account.",
help_text="Please write the desired name "
+ "of this account. The prefix 'SVC_' will"
+ " be added to this name",)
form = NewADServiceAccount(request.POST or None)
if form.is_valid():
...