Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据中未重新排序修改后的django表单cleand_data do_Python_Django_Django Forms - Fatal编程技术网

Python 数据中未重新排序修改后的django表单cleand_data do

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

我想向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 = 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
from
cleaned\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():
   ...