【问题标题】:How can i update django foreignkey?我如何更新 django 外键?
【发布时间】:2025-11-26 06:10:01
【问题描述】:

我有一个模型OrderItem,它有一个外键order。我也有一个像这样创建 OrderItem 的函数,

OrderItem.objects.create(shopping_id=_shopping_id(request),
                                          quantity=quantity,
                                          item=i,
                                          created_by=anon_user,
                                          modified_by=anon_user)

如您所见,我没有包含order,因为我无法理解我如何能够做到这一点。 我收到错误order_items.order_id may not be NULL

这是我的模特OrderItem

class OrderItem(SmartModel):
    shopping_id = models.CharField(max_length=50,db_index=True)
    quantity = models.IntegerField(default=0)
    item = models.ForeignKey(Item)
    order = models.ForeignKey(Order)

感谢任何形式的帮助。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    为什么添加order 与添加item 有什么不同?它们都是 ForeignKey,在这两种情况下,您只需将相关对象作为关键字参数传递。

    【讨论】:

    • 404 由于未找到 url 或对象而返回。在将其添加到 OrderItem 之前,您确定该订单对象存在吗?
    • 如丹尼尔所写,订单和项目对象应以相同的方式添加。
    • @UnLiMiTeD 你的权利,order object 在我添加到OrderItem 之前不存在,你有什么建议我应该在这里..
    【解决方案2】:

    如果不存在,则必须检查它是否存在,然后创建 OrderItem 对象。 代码应如下所示:

         try:
             order = Order.objects.get(pk=order_id)
         except:
               order = Order.objects.create(name=name)
    
         OrderItem.objects.create(shopping_id=_shopping_id(request),
                                          quantity=quantity,
                                          item=i,
                                          order=order
                                          created_by=anon_user,
                                          modified_by=anon_user)
    

    【讨论】:

    • 哦,我还不能投反对票……这就是我认为的原因……但再次感谢
    【解决方案3】:

    这不行吗?

    order, created = Order.objects.get_or_create(...)
    

    然后

    OrderItem.objects.create(order=order, shopping_id=_shopping_id(request),
                                              quantity=quantity,
                                              item=i,
                                              created_by=anon_user,
                                              modified_by=anon_user)
    

    【讨论】:

    • 这在其他情况下会起作用,但在我的情况下却没有,但谢谢..