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

Django UpdateView始终更新数据库首个元素问题求助

问题原因分析

你遇到的问题核心在于Django的UpdateView默认使用URL中的pk参数来定位要编辑的模型对象,但你的URL配置里:

path('release/<int:pk>/feature/<int:pk1>/update/', views.FeatureUpdate.as_view(), name='feature-update'),
  • pk对应的是Release的主键
  • Feature的主键对应的是pk1

所以当你访问release/1/feature/2/update/时,UpdateView会错误地用pk=1去查询Feature模型,刚好数据库里id=1的Feature是feature-A,自然每次编辑的都是它,不管你传的pk1是多少。

解决方案

有两种简单的修复方式,选一种就行:

方案1:修改URL参数名(推荐)

把URL中Feature的主键参数改成pk,同时把Release的参数改成别的名字(比如release_pk),这样UpdateView就能自动识别正确的Feature主键:

path('release/<int:release_pk>/feature/<int:pk>/update/', views.FeatureUpdate.as_view(), name='feature-update'),

如果之后需要在视图里获取对应的Release对象,可以通过self.kwargs.get('release_pk')来获取。

方案2:在视图中指定主键参数名

如果你不想改URL,可以在FeatureUpdate视图里告诉Django要用pk1作为Feature的主键参数,设置pk_url_kwarg属性:

class FeatureUpdate(UpdateView):
    model = Feature
    fields = ['name']
    pk_url_kwarg = 'pk1'  # 指定用URL里的pk1作为Feature的主键
小提示

可以在视图里加个调试打印,确认拿到的参数是否正确:

class FeatureUpdate(UpdateView):
    model = Feature
    fields = ['name']
    pk_url_kwarg = 'pk1'

    def get(self, request, *args, **kwargs):
        print("拿到的URL参数:", self.kwargs)  # 打印参数,方便调试
        return super().get(request, *args, **kwargs)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:38:12