错误通用详细信息视图必须使用对象pk或slug调用,即使使用pk也是如此

时间:2016-11-20 16:41:15

标签: python django django-views django-class-based-views

我正在尝试更新具有外键字段的视图的记录,因此我收到错误,因为我尝试更新另一个没有外键字段的模型并且它工作得非常好。

还有其他这样的排队,但在我的情况下,我正在通过pk。

urls.py

 urlpatterns = [
        url(r'^info/(?P<studentpk>\d+)/update/$', views.updatestudent.as_view(), name="updatestudent"),

]

views.py

class updatestudent(UpdateView):
    model = Student
    form_class = forms.studentform
    template_name = "temp/updatestudent.html"

    def get_success_url(self):
        return reverse("courses")

updatestudent.html

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update" />
</form>

models.py

class Student(models.Model):
    classfk = models.ForeignKey(Class)
    name = models.CharField(max_length=100)
    birth_date = models.DateField('Birthdate')

    def __str__(self):
        return self.name

错误

AttributeError: Generic detail view updatestudent must be called with either an object pk or a slug.

1 个答案:

答案 0 :(得分:7)

Django不希望您在URL模式中使用studentpk。最简单的解决方法是使用pk代替。

url(r'^info/(?P<pk>\d+)/update/$', views.updatestudent.as_view(), name="updatestudent"),

如果您确实想使用studentpk,请在视图中设置pk_url_kwarg

class updatestudent(UpdateView):
    model = Student
    form_class = forms.studentform
    template_name = "temp/updatestudent.html"

    pk_url_kwarg = 'studentpk'

请注意,在Python中,推荐的样式是命名基于类的视图UpdateStudent和表单类StudentForm