Django表单计算结果写入Model报错:sq_price参数重复赋值
解决Django中create方法参数重复的问题
错误原因很明确:你调用ProjectDetail.objects.create()时,同时通过显式参数sq_price = sq_price和展开**detail_clean传递了两次sq_price参数。因为ProjectDetailForm的字段包含sq_price,所以detail_clean字典中已经存在这个键,和你手动传入的参数冲突,导致Django抛出参数重复的错误。
修复方案
在创建ProjectDetail对象前,从detail_clean中移除sq_price键即可避免冲突:
修改代码中创建ProjectDetail的部分:
# 移除detail_clean中的sq_price,防止参数重复 detail_clean.pop('sq_price', None) ProjectDetail.objects.create( project = p, sq_price = sq_price, **detail_clean )
补充说明
pop('sq_price', None)里的None是为了避免detail_clean中没有sq_price键时抛出KeyError,提升代码健壮性。- 如果你不想修改原
detail_clean字典,也可以生成一个排除sq_price的新字典再展开:filtered_detail = {k: v for k, v in detail_clean.items() if k != 'sq_price'} ProjectDetail.objects.create( project = p, sq_price = sq_price, **filtered_detail )
内容的提问来源于stack exchange,提问作者nikar
相关产品推荐
相关产品推荐

