You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django类视图报错:UpdateTeacherIssueForm缺失必填参数pk

错误原因

你的UpdateTeacherIssueForm表单的__init__方法要求必须传入pk参数,但视图的get_form_kwargs方法未传递该参数,导致触发「缺少必填位置参数pk」的错误。

解决方案

方案1:直接传递URL中的pk参数

修改视图的get_form_kwargs方法,从视图的self.kwargs中获取URL捕获的pk(Django基于类视图会自动将URL中的参数存入self.kwargs),并添加到表单的参数集合中:

class UpdateTeacherIssueView(LoginRequiredMixin,UpdateView):
    model = TeacherIssue
    form_class = UpdateTeacherIssueForm
    template_name = 'crud_forms/edit_teacher_issue.html'
    success_url = reverse_lazy('view_student') #To be changed
    
    def get_form_kwargs(self):
        kwargs = super(UpdateTeacherIssueView, self).get_form_kwargs()
        kwargs['school'] = self.request.user.school
        kwargs['issuer'] = self.request.user
        kwargs['pk'] = self.kwargs['pk']  # 新增:传递URL中的pk参数
        return kwargs

方案2:利用表单instance简化逻辑(推荐)

在更新场景下,Django的UpdateView会自动将当前要修改的对象以instance参数传递给表单,你可以直接从instance中获取所需数据,无需额外传递pk:

  1. 修改表单代码:
class UpdateTeacherIssueForm(forms.ModelForm):
    """Edit TeacherIssue Form"""
    # 移除pk参数,从instance中获取数据
    def __init__(self,*args, school, issuer, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['issuer'].initial = issuer
        self.fields['book_id'].queryset = Books.objects.filter(school=school,no_of_books=1).select_related('subject')
        # 从instance中获取borrower_teacher设置初始值
        if self.instance:
            self.fields['borrower_teacher'].initial = self.instance.borrower_teacher
    class Meta:
        model = TeacherIssue
        fields = ['issuer','book_id','borrower_teacher','issue_date']
        widgets = {
            'borrower_teacher':forms.TextInput(attrs={"class":'form-control','type':'hidden'}),
            "issue_date":forms.TextInput(attrs={"class":"form-control"}),
            'issuer':forms.TextInput(attrs={"class":'form-control','type':'hidden'}),
            'book_id':Select2Widget(attrs={'data-placeholder': 'Select Book','data-width': '100%'},)
        }
  1. 视图恢复原有get_form_kwargs代码(去掉pk相关注释行即可)。

内容的提问来源于stack exchange,提问作者fakeMake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:05:31