Django Model Formset只需要第一个表单

时间:2011-08-22 10:22:12

标签: django django-forms

在具有3个表单副本的modelformset中,如何指定只需要第一个集合,但其余部分可以为空或空?

3 个答案:

答案 0 :(得分:2)

我使用了类似这样的内联formset:

class BaseSomethingFormset(BaseInlineFormSet):
    def __init__(self, *args, **kwargs):
        super(BaseSomethingFormset, self).__init__(*args, **kwargs)
        self.forms[0].empty_permitted = False
        self.forms[0].required = True

表单字段必须默认设置为required=False

答案 1 :(得分:1)

Matthew Flanagan有一个package of things for Django,在那个包中是RequireOneFormset类。您可以轻松地将此类扩展为需要3个表单而不是一个。

希望能帮到你。

答案 2 :(得分:0)

您可以将BaseModelFormSet子类化,以便修改第一个表单并使其成为必需:

from django.forms.models import BaseModelFormSet

class OneRequiredFormSet(BaseModelFormSet):
    def _construct_form(self, i, **kwargs):
        f = super(OneRequiredFormSet, self)._construct_form(i, **kwargs)
        if i == 0:
            f.empty_permitted = False
            f.required = True
        return f

然后,您可以使用formset关键字参数告诉modelformset_factory使用您的新课程:

from django.forms.models import modelformset_factory

ParticipantFormSet = modelformset_factory(Participant, extra=1,
                                          form=ParticipantForm,
                                          formset=OneRequiredFormSet)