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

时间:2014-03-22 14:55:05

标签: python django forms models

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

Name
User
City

我允许用户选择当前不在系统中的新用户(对于这种情况,我应该得到一个文本" Jack"在我的 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')

这也很好用。

请帮忙。

1 个答案:

答案 0 :(得分:0)

如果您想使用+-----------------+----------+-------------+---------------------+ | NAME | POSITION | PHONE | EMAIL | +-----------------+----------+-------------+---------------------+ | John Doe | CEO | 1234-5678-0 | john@company.com | +-----------------+----------+-------------+---------------------+ | Elvis Presley | Singer | 0234-5678-0 | elvis@heaven.com | +-----------------+----------+-------------+---------------------+ | Albert Einstein | Thinker | 0000-8888-0 | albert@universe.gov | +-----------------+----------+-------------+---------------------+ 代替self.data,则可以构建"复合前缀"使用字段self.cleaned_dataauto_id(或至少在表单已通过表单集实例化时)。

请参阅prefix https://docs.djangoproject.com/es/1.9/_modules/django/forms/formsets/

您的方法将如下所示:

_construct_form()

<强>更新

更简单的是调用方法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