如何在clean方法中从model_formset_factory的self.data中获取字段
我正在使用 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_id
和 prefix
来构建一个“复合前缀”(至少在表单是通过表单集实例化的时候可以这样做)。
可以查看 _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'))