我不知道如何在Django中显示表单集

时间:2019-08-18 17:21:25

标签: django

我不知道如何单独显示表单集。

我了解如何一次显示所有内容。 但是我尝试了一些模型字段名称,但是没有用。

#views
class UserEdit(generic.UpdateView):
    model = User
    form_class = forms.UserUpdateForm
    template_name = 'accounts/accounts_edit.html'
    success_url = reverse_lazy('accounts:edit')

    def get_object(self):
        return get_object_or_404(User, pk=self.request.user.user_id)
#forms
class ProfileUpdateForm(forms.ModelForm):

    class Meta:
        model = profile
        fields = ('first_name','last_name','birthday')

        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            for field in self.fields.values():
                field.widget.attrs['class'] = 'form-control'

ProfileFormSet = inlineformset_factory(User,profile,form=ProfileUpdateForm,extra=0)

class UserUpdateForm(mixins.ModelFormWithFormSetMixin,forms.ModelForm):
    #Userモデルにprofileモデルを入れる
    formset_class = ProfileFormSet
    class Meta:
        model = User
        fields = ('username','email',)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'
#template
<form method="POST" enctype="multipart/form-data">
            {% csrf_token %}
                {{ form.username.label_tag }}
                {{ form.username }}
                {{ form.email.label_tag }}
                {{ form.email }}
                {{ form.formset }}

            <button type="submit">Submit</button>
        </form>

我想指定和显示而不是使用formset一次显示的方法。

后记 Mixins是为数据验证和数据存储而创建的。

我想在模板中显示表单集显示的详细信息。 但是,我只知道如何一次显示它,例如{{form.formset}}。 理想情况下,我想像{{form.formset.first_name}}

一样单独显示它
#mixins
class ModelFormWithFormSetMixin:

    def __init__(self, *args, **kwargs):
        super(ModelFormWithFormSetMixin, self).__init__(*args, **kwargs)
        self.formset = self.formset_class(

            instance=self.instance,

            data=self.data if self.is_bound else None,
        )

    def is_valid(self):
        return super(ModelFormWithFormSetMixin, self).is_valid() and self.formset.is_valid()

    def save(self, commit=True):
        saved_instance = super(ModelFormWithFormSetMixin, self).save(commit)
        self.formset.save(commit)
        return saved_instance

1 个答案:

答案 0 :(得分:0)

表单集是一组表单,因此您必须在表单中循环{%for form.formset%}中的子表单{{subform.first_name}} {%endfor%} Dirkgroten在评论中告诉我。 谢谢。