Skip to main content
 首页 » 编程设计

python之错误通用详细 View 必须使用对象 pk 或 slug 调用,即使使用 pk

2025年05月04日14lonelyxmas

我正在尝试更新具有外键字段的 View 的记录,因此出现错误,因为我尝试更新没有外键字段的另一个模型并且效果很好。

还有其他类似的问题,但就我而言,我通过了 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> 

模型.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. 

请您参考如下方法:

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

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

如果你真的想使用studentpk,那么设置pk_url_kwarg在 View 中。

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

请注意,在 Python 中,推荐的样式是将基于类的 View 命名为 UpdateStudent,将表单类命名为 StudentForm。