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
相关产品推荐
相关产品推荐

