Django创建Order对象报错:需传入ProductVariation实例而非ID值
错误解决:Cannot assign "1": "Order.variation" must be a "ProductVariation" instance
错误原因
Order模型的variation字段是ForeignKey类型,Django要求给ForeignKey字段赋值时必须传入关联模型的实例对象,你代码里传入的是variation_obj.id(整数类型的ID值),这就触发了类型不匹配的ValueError。
解决方法
有两种可行的修改方式:
方式1:直接传入获取到的实例对象
你已经通过ProductVariation.objects.get(...)拿到了variation_obj实例,直接将这个对象赋值给variation字段即可:
variation_obj = ProductVariation.objects.get(id=int(variation_id_list[index])) quantity = variation_quantity_list[index] total = variation_total_list[index] total = float(total) # 修改variation参数,传入实例而非ID order_object = Order(user=request.user, variation=variation_obj, quantity=quantity, total=total)
方式2:使用variation_id直接传ID值
Django的ForeignKey字段会自动生成对应的字段名_id属性,你可以通过这个属性直接传入整数ID:
variation_obj = ProductVariation.objects.get(id=int(variation_id_list[index])) quantity = variation_quantity_list[index] total = variation_total_list[index] total = float(total) # 使用variation_id传入ID值 order_object = Order(user=request.user, variation_id=variation_obj.id, quantity=quantity, total=total)
两种方式都能解决这个错误,推荐第一种,因为你已经获取了实例,直接使用更直观。
内容的提问来源于stack exchange,提问作者Kaynan Kaynan Felipe Rodrigues
相关产品推荐
相关产品推荐

