【发布时间】:2017-08-03 23:43:46
【问题描述】:
我正在 django v1.10 上开发应用,我想通过 POST 将 pk 传递给 UpdateView (CBV) > 出于安全原因的参数,因为该应用程序使用身份验证系统。
我研究并发现覆盖 get_object 方法我(应该)得到我想要的,但没有任何反应。 (Django UpdateView without pk in url)
我不知道是我做错了什么还是错过了什么。也许这种情况需要不同的方法。
在我的模板链接来源(不是 UpdateView 模板)中,我通过表单中的链接传递参数,calification.id 是 pk。
<form method="post" action="{% url 'edu:calification-update' %}">
{% csrf_token %}
<input type="hidden" value="{{ calification.id }}" name="pk">
<button class="btn btn-default btn-xs" type="submit">editar</button>
</form>
在接收视图中,我重写了 get_object 方法:
class CalificationUpdateView(UpdateView):
model = Calification
template_name = 'edu/calification_create.html'
form_class = CalificationForm
def get_object(self):
obj = get_object_or_404(Calification, pk=self.request.POST.get('pk'))
return obj
在我的模型表单中:
class CalificationForm(ModelForm):
class Meta:
model = Calification
fields = '__all__'
在我的 edu/calification_create.html:
<form method="post" class="form-horizontal">
{% csrf_token %}
{{ form }}
<input type="submit" class="btn btn-success snps-btn-save form-control" value="Guardar" />
</form>
但在更新视图中没有检索到对象,表单为空白,没有出现错误。
我检查了POST参数传递OK,模板对象没有问题,calification.id声明正常,就像get_object方法没有检索实例。
谢谢
【问题讨论】:
-
如果在
get_object方法中打印self.request.POST.get('pk')会得到什么。 -
@Alasdair 我得到了 pk 的值(即 1)。
-
您的
get_object方法看起来还可以。目前还不清楚问题是什么。为什么要使用创建模板edu/calification_create.html进行更新视图。 -
edu/calification_create.html 有一个标准的 django 模板代码表单。
标签: django django-views