如何从视图中访问Django表单字段中的数据?

时间:2009-06-24 18:34:24

标签: django django-forms

我有一个简单的Django表单:

class testForm(forms.Form):
  list = forms.CharField()

  def getItems(self):
    #How do I do this?  Access the data stored in list.
    return self.list.split(",") #This doesn't work

列表表单字段存储csv数据值。从视图中的testForm的外部实例,我希望能够查看存储在表单字段中的.csv值列表。

4 个答案:

答案 0 :(得分:2)

与其他人已经提到的一样,您需要使用表单的cleaned_data字典属性和is_valid方法。所以你可以这样做:

def getItems(self):
    if not self.is_valid():
        return []    # assuming you want to return an empty list here
    return self.cleaned_data['list'].split(',')

您的方法不起作用的原因是表单字段不是典型的实例变量。希望这有帮助!

答案 1 :(得分:1)

为了获取表单数据,您通常在django中执行的操作将是这样的。

form = testForm(request.POST)
if form.is_valid:
    # form will now have the data in form.cleaned_data
    ...
else:
    # Handle validation error
    ...

如果您想自己进行一些数据格式化或验证,可以将其放在表单中的验证方法中。对于整个表单或表单字段。这也是让你的代码更干的好方法。

答案 2 :(得分:0)

这里有一些你需要知道的事情。

首先,通常在Python类方法中,您可以通过“self”对象访问属性。所以理论上你的功能应该是:

def get_items(self):
    return self.list.split(",")

但是,对于Django表单,这不起作用。这是因为字段没有自己的值 - 该值仅在呈现时附加到字段,并且以不同的方式获取,具体取决于值是通过初始数据应用还是通过传入数据字典

如果您已经验证了表单(通过form.is_valid()),则可以通过cleaned_data词典获取表单:

    return self.cleaned_data['list']

但是,如果list因任何原因验证失败,则会失败。

答案 3 :(得分:0)

在表单上调用is_valid,然后访问cleaning_data字典。