【发布时间】:2014-03-03 14:59:37
【问题描述】:
我不知道如何在FormView 中使用ModelForm 来更新已经存在的实例??
此 URL 上的 POST 表单:r'/object/(?P<pk>)/'
我使用ModelForm(而不是直接使用UpdateView),因为其中一个字段是必需的,我对其进行了清理。
我基本上想在FormView(在POST)中初始化表单时提供kwarg instance=...,以便它绑定到在url中给出pk的对象。但我不知道在哪里做...
class SaveForm(ModelForm):
somedata = forms.CharField(required=False)
class Meta:
model = SomeModel # with attr somedata
fields = ('somedata', 'someotherdata')
def clean_somedata(self):
return sometransformation(self.cleaned_data['somedata'])
class SaveView(FormView):
form_class = SaveForm
def form_valid(self, form):
# form.instance here would be == SomeModel.objects.get(pk=pk_from_kwargs)
form.instance.save()
return ...
【问题讨论】:
-
我不太明白你为什么不能使用
UpdateView。你能发布你的视图代码吗? -
@jproffitt 清楚为什么我现在不能使用 UpadteView 了吗?
-
似乎答案在
SingleObjectMixin中(或停止尝试使用django 基于类的通用视图) -
不清楚。 UpdateView 继承自 SingleObjectMixin。看来这正是您所需要的。如果您在场地上进行清洁并不重要。您不想用现有数据填充表单吗?
-
对于可能遇到此问题的其他人:如果您发现必须添加
blank=True, null=True以使事情得到足够的验证以进行后处理,您最好将模型解耦并表单,只使用表单,然后手动创建模型实例。在许多用例中对我来说效果更好,例如当您需要访问request.user时。
标签: django django-views django-forms