我了解您可以使用initiate
来自this question的Form
类。{/ 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
?
答案 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
然后你会像上面那样返回表格。