我正在开发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
在我的ModelForm中:
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参数传递好了,模板对象没有问题, calification.id 被宣告正常,就像 get_object 方法没有检索实例。
由于
答案 0 :(得分:0)
要更新的对象的默认模板上下文名称为object
。如果您使用其他内容,则需要使用context_object_name
指定它。
答案 1 :(得分:0)
您必须修改“ get_object”方法,通过替换以下行来捕获要传递的参数的值:
pk = self.kwargs.get (self.pk_url_kwarg)
作者:
if self.request.method == 'POST':
form = YourForm(request.POST, request.FILES)
if form.is_valid ():
pk = form.pk
这对我有用