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

如何解决Django报错:ProjectDetailsAdmin.projekt必须是Projekt实例

问题原因

报错核心是 ProjectDetailsAdmin 模型里的projekt是外键字段,必须接收Projekt类的实例对象,你当前从POST请求中拿到的projekt是字符串类型的项目ID,直接赋值就触发了类型不匹配错误。

修复步骤
  • 第一步:修正视图POST逻辑
    首先你需要把拿到的字符串ID转换为Projekt实例,同时修复原代码里参数间缺少逗号的语法错误,修改后的代码如下:

    if request.method == 'POST':
        projekt_id = request.POST.get('projekt')
        projekt = None
        if projekt_id:
            try:
                projekt = Projekt.objects.get(id=projekt_id)
            except Projekt.DoesNotExist:
                # 可自行补充项目ID不存在的错误处理逻辑
                pass
        projekt_name = request.POST.get('projekt_name')
        r01 = request.POST.get('r01') 
        
        szervkult_adm = ProjectDetailsAdmin(projekt=projekt, projekt_name=projekt_name, r01=r01)
        szervkult_adm.save()
    

    如果你不想额外查一次数据库,也可以用外键的_id后缀直接赋值ID,写法如下:

    szervkult_adm = ProjectDetailsAdmin(projekt_id=projekt_id, projekt_name=projekt_name, r01=r01)
    
  • 第二步:优化下拉框HTML代码
    原下拉框没有显式设置value属性,且仅展示ID用户无法区分项目,修改为:

    <div class="container bg-warning my-3">Válaszd ki projektet:
      <select class="form-select" id="projekt" name="projekt" aria-label="">
        {% for i in allprojects %}
          <option value="{{ i.id }}">{{ i.projekt }}</option>
        {% endfor %}
      </select>
    </div>
    
其他可优化点
  • 视图里的RawQuerySet写法可以替换为普通ORM查询,性能和可读性更好
  • POST提交保存成功后建议返回重定向响应,避免用户刷新页面重复提交表单
  • 可以加表单校验逻辑,避免参数缺失或格式错误触发异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:05