如何在clean方法中从model_formset_factory的self.data中获取字段

1 投票
1 回答
1628 浏览
提问于 2025-04-17 23:25

我正在使用 modelformset_factory 来编辑我界面上的多张图片。每张图片里有以下字段。

Name
User
City

我允许用户选择一个当前系统中没有的新用户(在这种情况下,我希望在我的 def clean_user(self) 方法中看到文本 "Jack",而不是 ID)。

但是使用 model_formset_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')

这个也可以正常工作。

请帮忙。

1 个回答

4

如果你想用 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'))

撰写回答