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

Django Field 'id' expected a number报错 UUID主键关联查询问题

问题根因
  • 你传入视图的pk参数是Projekt表的主键值(UUID类型),但Srodek模型没有自定义主键,默认使用Django自动生成的自增整数类型id,用UUID值去匹配整数类型的Srodek.id自然会触发类型不匹配报错
  • 你的业务要求是每个Projekt对应唯一Srodek,二者是OneToOne关联,完全可以通过关联字段直接查询,不需要传Srodek的id
修复方案

第一步:修正视图查询逻辑

把原视图里的srodek = Srodek.objects.filter(id=pk)改成按关联的Projekt主键查询:

# 直接通过OneToOne关联字段查询,pk是传入的Projekt的UUID
srodek = Srodek.objects.filter(projekt_id=pk)
# 或者更符合Django ORM习惯的写法:
# srodek = Srodek.objects.filter(projekt__id=pk)

如果要保证一个Projekt只对应一个Srodek,也可以用get方法代替filter,配合异常捕获避免不存在的情况:

from django.shortcuts import get_object_or_404
srodek = get_object_or_404(Srodek, projekt_id=pk)

第二步(可选建议)

如果你的路由传参本来就对应Projekt的id,可以把路由参数名改成projekt_pk避免语义混淆,后续维护更清晰。

额外优化建议

你的OptionsForm保存的时候没有绑定当前的Projekt/用户,后续会出现保存的数据关联错误的问题,建议修改表单保存逻辑:

if form.is_valid():
    # 提交的表单实例不直接保存,先赋值关联字段
    srodek_form = form.save(commit=False)
    srodek_form.wlasciciel = profil
    # 关联对应当前Projekt,避免关联错误
    srodek_form.projekt = get_object_or_404(Projekt, id=pk)
    srodek_form.save()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:45:04