Django 4.2.9更新Project报错:需传入Customer实例而非元组
Django 4.2.9更新Project模型时ValueError异常修复
问题现象
更新Project模型实例时触发如下错误:
Internal Server Error: /edit-project raise ValueError( ValueError: Cannot assign "('customer',)": "Project.customer" must be a "Customer" instance
问题原因
视图中给Project实例字段赋值时,每一行末尾都添加了逗号,导致赋值内容变成单元素元组,而非预期的字段值。例如project.customer = customer,实际是将(customer,)这个元组赋值给字段,而不是Customer实例本身,违反了外键字段必须关联对应模型实例的要求。
修复步骤
- 修正字段赋值代码:去掉赋值语句末尾的逗号,确保直接赋值字段值而非元组:
# 替换原错误的赋值代码 project.project_name = project_name project.project_scope = project_scope project.customer = customer project.project_type = type project.estimated_finish_date = end_date project.update_date = now project.update_count = update_count project.start_date = start_date project.estimated_cost = project_budget project.patent = patent project.market = market
- 修正上下文更新代码:原代码中
context += {"success","Başarıyla Güncellendi"}是错误的集合操作,应改为字典赋值方式:
# 替换原错误的上下文更新代码 context["success"] = "Başarıyla Güncellendi"
补充说明
- 逗号在Python中用于创建元组,即使只有一个元素,末尾加逗号也会被识别为元组类型,这是常见的语法陷阱。
- 修复后重新运行代码,即可正常完成Project实例的更新操作。
内容的提问来源于stack exchange,提问作者Umut Konmus
相关产品推荐
相关产品推荐

