【问题标题】:How can I access the data in a Django form field form a view?如何从视图中访问 Django 表单字段中的数据?
【发布时间】:2009-06-24 18:34:23
【问题描述】:

我有一个简单的 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 值列表。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    就像其他人已经提到的,您需要使用表单的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(',')
    

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

    【讨论】:

      【解决方案2】:

      您通常在 django 中为获取表单数据所做的操作是这样的。

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

      如果你想自己做一些数据格式化或验证,你可以把它放在表单中的验证方法中。对于整个表单或表单域。这也是使您的代码更加干燥的好方法。

      【讨论】:

        【解决方案3】:

        这里有几件事你需要知道。

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

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

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

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

            return self.cleaned_data['list']
        

        但是,如果 list 由于任何原因验证失败,这将失败。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2011-03-22
            • 2018-11-05
            • 2022-01-23
            • 2020-11-09
            • 2011-03-13
            • 2014-04-19
            • 2012-03-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多