在modelform中访问上下文变量

时间:2014-05-29 13:30:36

标签: django django-views django-forms

我有一个像这样的modelformset工厂:

形式:

class AwesomeModelForm(ModelForm):

    class Meta:
        model = AwesomeModel
        fields = ('thing', 'field_2', 'field_3')
        widgets = {
            'thing': HiddenInput(),
            }

查看:

class AwesomeView(TemplateView):
    formset = modelformset_factory(AwesomeModel, form=AwesomeModelForm,
        can_delete=True)

    def get_context_data(self, **kwargs):
        self.id = self.kwargs['id']
        self.thing = Thing.objects.get(id=self.id)
        formset = self.allocate_formset(queryset=AwesomeModel.objects\
            .filter(thing=self.thing))
        context = super(AllocateLeave, self).get_context_data(**kwargs)
        context['formset'] = formset
        return context

我想使用初始数据预填充modelformset_factory。

formset = self.allocate_formset(queryset=AwesomeModel.objects.filter(thing=self.thing), initial=[{'thing': self.thing,}])

Django似乎认为" initial"的应用表示表单已更改,因此,如果我想更改表单值,而不是更改'额外'形式,验证失败,因为额外的'形式不完整。 e.g。

for form in new_formset.forms:
    print form.has_changed()

为'额外'返回True带有inital集的字段,如果未在formset声明中设置initial,则返回False。

虽然迭代formset中的表单可以保存每个现有表单,但如果我想删除表单,或者应用任何表单集范围的验证,表单将无法通过验证。

我认为解决方案可能是使用干净的方法来处理“事情”。字段,但我无法看到如何访问modelform类中视图的上下文变量。这是正确的方法还是我应该追求另一种选择?

由于

0 个答案:

没有答案