Django:对象不可迭代

时间:2018-12-20 13:40:19

标签: python django

我想用初始数据填写我的模型表格。但是,我总是收到'Attendee' object is not iterable。完整回溯:http://dpaste.com/0BH9MAM

当我对此进行评论时:initial=self.object,,错误消失了。但是,我的from未预先填充任何数据。随着我添加更多表单,我无法使用FormMixinUpdateForm

有人可以帮助我解决这个问题吗?

class AssignAttendee(SuccessMessageMixin, SingleObjectMixin, TemplateView):
        template_name = 'attendees/front/assign_attendee.html'
        success_message = _("Attendee has been successfully updated.")

        def get_object(self):
            return get_object_or_404(
                Attendee,
            ticket_reference=self.kwargs['ticket_reference'],
            ticket_code=self.kwargs['ticket_code'],
        )

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        return super().get(request, *args, **kwargs)

    # def post(self, request, *args, **kwargs):
    #     self.object = self.get_object()
    #     return super().post(request, *args, **kwargs)

    @cached_property
    def attendee_form(self):
        return AssignAttendeeForm(
            prefix='attendee',
            data=self.request.POST or None,
            initial=self.object,
        )

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context = {
            'attendee': self.object,
            'attendee_form': self.attendee_form,
        }
        return context

forms.py

class AssignAttendeeForm(forms.ModelForm):

    class Meta:
        model = Attendee
        fields = (
            'ticket_reference',
            'first_name',
            'last_name',
            'company_name',
            'email',
        )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['ticket_reference'].widget = forms.HiddenInput()
        self.fields['ticket_reference'].disabled = True
        for visible_field in self.visible_fields():
            visible_field.field.widget.attrs['class'] = 'form-control'

1 个答案:

答案 0 :(得分:0)

您应该将字典传递给Form.initial,而不是对象。

您可能正在寻找ModelForm.instance关键字参数,该参数允许更新模型的现有实例。

相关问题