【问题标题】:How to get a filed from self.data in model_formset_factory in clean method如何以 clean 方法从 modelformset_factory 中的 self.data 获取字段
【发布时间】:2014-03-22 14:55:05
【问题描述】:

我正在使用modelformset_factory 在我的界面上编辑多个图像。 我在每个图像中都有以下字段。

Name
User
City

我已允许用户选择当前不在系统中的新用户,(在这种情况下,我应该在我的 def clean_user(self) 而不是 ID

但是使用model_formseta_factory,我在self.data 中得到了一些有线名称。当我尝试获取 self.data.get('user') 时,我什么也没得到,显然没有这个名字的键, 密钥的格式类似于form_0_user 等。

fields = ['city', 'name']

注意,我的字段中没有用户。如果我这样做,它将无法通过验证。

def clean(self):
    data = self.cleaned_data
    data['name'] = data.get('name', '').strip()
    return data

工作正常

pic_credits = self.data.get('user')

这不是。

pic_credits = self.data.get('form-0-name')

这也很好用。

请帮忙。

【问题讨论】:

  • 任何人都可以帮助我吗??
  • 你找到解决办法了吗?

标签: python django forms models


【解决方案1】:

如果您想使用self.data 而不是self.cleaned_data,您可以使用字段auto_idprefix 构造“复合前缀”(或者至少在表单已被表单集实例化时)。

_construct_form()https://docs.djangoproject.com/es/1.9/_modules/django/forms/formsets/

您的方法将如下所示:

def clean(self):
    # ...

    form_prefix_and_autoid = "%s-%d-" % (self.prefix, self.auto_id)
    pic_credits = self.data.get(form_prefix_and_autoid + 'name')         

    # ...

更新:

更简单的是调用self.add_prefix方法

    pic_credits = self.data.get(self.add_prefix('name'))

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 1970-01-01
    • 2020-07-13
    • 2016-05-09
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多