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

Django使用pk_url_kwarg时出现invalid literal for int()错误求助

问题原因与解决方案

这个错误的根源很明确:你误用了pk_url_kwarg属性。

pk_url_kwarg是Django DetailView用来指定主键字段对应的URL参数名的,而主键默认是模型的id字段(整数类型)。当你把pk_url_kwarg设为program_code时,Django会尝试把URL传入的字符串'T0001'转换成整数,当作主键去查询,这自然会抛出invalid literal for int() with base 10的错误——因为字符串没法转成整数。

正确的做法:使用slug字段配置

因为program_code是一个唯一的字符串字段,你应该用slug_field和slug_url_kwarg来告诉DetailView通过这个字段查询对象:

修改你的views.py:

class ProgramDetailView(DetailView):
    model = Program
    template_name = 'submissions/program_details.html'
    slug_field = 'program_code'  # 指定用来查询的字段名
    slug_url_kwarg = 'program_code'  # URL中对应的参数名(和slug_field同名时可省略)

额外建议:确保字段唯一性

为了避免查询时返回多个结果导致错误,建议给program_code字段添加唯一性约束,修改models.py:

program_code = models.CharField(max_length=5, unique=True)

这样修改后,DetailView就会正确地通过URL传入的program_code字符串去查询对应的Program对象,而不会再尝试转换成整数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:38:09