如何为表单中的字段启动值以便在模板中进行编辑

时间:2012-05-17 19:57:13

标签: python django django-forms django-templates django-views

我了解您可以使用initiate来自this questionForm类。{/ p>

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

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

最佳做法是什么?


修改

对于@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

1 个答案:

答案 0 :(得分:2)

假设您使用的是ModelForm,它实际上相当简单。任务是这样的:检索要填充“编辑”的模型对象,基于ModelForm创建新表单,并使用'instance'将其填充到对象中。

以下是您视图的骨架:

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

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

您可以使用以下内容访问“初始”值:

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

然后你会像上面那样返回表格。