Django UpdateView pk通过POST参数

Django UpdateView pk通过POST参数,django,django-views,Django,Django Views,我正在django v1.10上开发一个应用程序,出于安全原因,我想通过POST参数将pk传递给UpdateView(CBV),因为该应用程序使用身份验证系统 我已经研究并发现覆盖get\u对象方法我应该得到我想要的,但什么都没有发生。() 我不知道我是做错了什么还是错过了什么。也许这种情况需要一种不同的方法 在我的模板链接源中(不是UpdateView模板),我通过链接以一种形式传递参数,calification.id是主键 <form method="post" action="{%

我正在django v1.10上开发一个应用程序,出于安全原因,我想通过POST参数将pk传递给UpdateView(CBV),因为该应用程序使用身份验证系统

我已经研究并发现覆盖get\u对象方法我应该得到我想要的,但什么都没有发生。()

我不知道我是做错了什么还是错过了什么。也许这种情况需要一种不同的方法

在我的模板链接源中(不是UpdateView模板),我通过链接以一种形式传递参数,calification.id是主键

<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>
在我的模型中:

class CalificationForm(ModelForm):
    class Meta:
        model = Calification
        fields = '__all__'
在myedu/calification\u 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>

{%csrf_令牌%}
{{form}}
但在更新视图中,不会检索对象,表单为空,不会出现错误

我检查了POST参数是否传递正常,template对象没有问题,calification.id被声明为正常,这就像get\u object方法没有检索实例一样


谢谢

要更新的对象的默认模板上下文名称是
对象
。如果您使用其他内容,则需要使用
上下文对象\u名称

来指定它,您必须修改“get\u object”方法,通过替换显示以下内容的行来捕获要传递的参数值:

pk = self.kwargs.get (self.pk_url_kwarg)
作者:


这对我有用

对不起@Tomas Walch,我不明白你的答案。据我所知,在CBV中,要使用pk以外的其他参数检索所需的实例,必须重写get_对象。“返回此视图将显示的单个对象。”据我所知,这不是您的问题。您的问题是您在模板中引用了
加州
。没有这样的变量,从
get\u object
返回的对象默认称为
object
。现在我明白你的答案了。模板对象没有问题,它已重命名。我编辑了这个问题,以澄清参数pk的呈现和传递是否正确。我尝试了同样的方法,但使用了GET,结果是相同的,没有找到任何对象。在您显示的代码示例中,您没有在任何地方设置
calification
的值。只是说说而已。你的
get\u对象没有什么问题。由于您没有得到404,那么您的错误在于如何引用模板中的对象。如果这是整个视图类。如果在
get\u object
方法中打印
self.request.POST.get('pk')
,您会得到什么。@Alasdair我得到pk的值(即1)。您的
get\u object
方法看起来不错。现在还不清楚问题出在哪里。为什么在更新视图中使用create template
edu/calification\u create.html
。edu/calification\u create.html有一个表单的标准django模板代码。{%csrf_令牌%}{{form}
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