1

我知道您可以使用这个问题中的类的initiate参数。Form

我正在创建一个编辑表单,并试图弄清楚如何从预先存在的对象中启动值。

我是在模板级别还是在视图级别执行(我什至不知道如何在模板级别执行)?或者我可能需要将实际对象传递给表单并在表单级别启动?

最佳做法是什么?


编辑:

对于@Bento:在我的原作Form中,我正在做这样的事情

class OrderDetailForm(forms.Form):
    work_type = forms.ChoiceField(choices=Order.WORK_TYPE_CHOICES)
    note = forms.CharField(widget=forms.Textarea)

    def __init__(self, creator_list=None, place_list=None, *args, **kwargs):
        super(OrderCreateForm, self).__init__(*args, **kwargs)

        if creator_list:
            self.fields['creator'] = UserModelChoiceField(
                queryset=creator_list,
                empty_label="Select a user",
            )

    def clean(self):
        super(OrderCreateForm, self).clean()

        if 'note' in self.cleaned_data:
            if len(self.cleaned_data['note']) < 50:
                self._errors['note'] = self.error_class([u"Please enter a longer note."])

                del self.cleaned_data['note']

        return self.cleaned_data

我该怎么做ModelForm呢?

4

1 回答 1

2

假设您使用的是 ModelForm,它实际上相当简单。任务是这样的:检索您要为其填充“编辑”的模型对象,基于您的 ModelForm 创建一个新表单,然后使用“实例”使用该对象填充它。

这是您的观点的骨架:

def view(request): 
  obj = Model.objects.get(pk = objectpk)
  form = MyModelForm(instance = obj)

  return render (request, "template", {'form' = form})

您可以使用以下方法访问“初始”值:

form.fields['fieldname'].initial = somevalue

然后你会返回上面的表格。

于 2012-05-17T20:15:27.937 回答