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

Django编辑记录报错:invalid literal for int() with base 10: 'edycja'求助

解决Django编辑功能的"invalid literal for int() with base 10: 'edycja'"错误

这个错误我之前帮同事排查过好几次,一眼就抓准了核心问题:Django正试图把字符串edycja转换成整数,但显然做不到——这说明你的视图函数szczegoly_pracownik期望接收一个整数类型的员工ID参数,但实际传入的却是edycja(看起来是波兰语的“编辑”),直接触发了类型转换失败。

下面是一步步的排查和修复方向:

1. 先检查URL路由配置

十有八九是路由规则和请求URL不匹配导致的。比如:

  • 你可能把编辑路由的顺序写反了,比如本该是path('pracownicy/<int:pk>/edycja/', ...),但表单提交的URL却是pracownicy/edycja/123/,这就导致<int:pk>捕获到的是edycja而不是ID;
  • 或者你把详情和编辑的路由搞混了,比如同一个视图同时对应了带edycja和不带的路径,导致参数错位。

建议把路由拆分成清晰的两条,比如:

# urls.py
# 员工详情页
path('pracownicy/<int:pk>/', views.szczegoly_pracownik, name='szczegoly_pracownika'),
# 员工编辑页
path('pracownicy/<int:pk>/edycja/', views.edytuj_pracownika, name='edytuj_pracownika'),

2. 检查表单的action属性

这是最容易出错的地方!编辑页面的表单提交时,一定要确保action指向正确的带ID的路由。比如你可能不小心写成了:

<!-- 错误写法:把'edycja'当成参数传给了路由 -->
<form method="post" action="{% url 'szczegoly_pracownik' 'edycja' %}">

正确的写法应该是传入员工的ID:

<!-- 正确写法:传入员工ID作为路由参数 -->
<form method="post" action="{% url 'edytuj_pracownika' pracownik.id %}">
    {% csrf_token %}
    <!-- 你的表单字段 -->
    <button type="submit">Zapisz zmiany</button>
</form>

3. 检查视图函数的参数处理

如果你的szczegoly_pracownik视图同时负责展示详情和处理编辑提交,那要确保它只接收整数ID参数,并且在处理POST请求时正确使用这个ID查询对象:

# views.py
from django.shortcuts import get_object_or_404, redirect, render
from .forms import PracownikForm
from .models import Pracownik

def szczegoly_pracownik(request, pk):
    # 用pk(整数)查询员工,找不到就返回404
    pracownik = get_object_or_404(Pracownik, pk=pk)
    
    if request.method == 'POST':
        # 绑定实例,处理编辑提交
        form = PracownikForm(request.POST, instance=pracownik)
        if form.is_valid():
            form.save()
            return redirect('szczegoly_pracownika', pk=pk)
    else:
        # GET请求,填充已有数据到表单
        form = PracownikForm(instance=pracownik)
    
    return render(request, 'szczegoly_pracownika.html', {'pracownik': pracownik, 'form': form})

这种情况下,路由只需要保留带ID的详情路径即可,不需要额外的edycja后缀——表单直接提交到当前详情页的URL就行。

总结

核心问题就是edycja这个字符串被错误地当成了整数ID传入了视图,触发了类型转换错误。重点排查路由规则和表单的action属性,确保传入视图的参数是正确的员工ID整数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:26:05