django - 如何在没有实例的情况下在 Django 中保存外键,但使用硬编码值
问题描述
假设我有这两个模型:
class Shipment(models.Model):
id = models.BigIntegerField(primary_key=True)
order_id = models.ForeignKey('orders.Order', null=True, blank=True, on_delete=models.SET_NULL)
class Order(models.Model):
id = models.BigIntegerField(primary_key=True)
ean = models.BigIntegerField(null=True, blank=True)
订单已经在数据库中填充,现在我只想将货物链接到相关订单。但我有一个硬编码 JSON 列表来填充我的货运模型。
{
"shipmentId": 541757635,
"orderId": 23598235,
}
因此,该 JSON 中的 orderId 表示数据库中已经存在的 Order 模型的主键。我如何循环这个以根据 order_id 将发货模型与正确的订单模型连接起来?
也许像这样的循环:
for shipment in shipments:
shipment = Shipment.objects.create(id=shipment.shipmentId, order_id=shipment.orderId
但这可能是因为没有实例,只有 JSON 中的硬编码值吗?
更新: 所以当我尝试使用这个循环时,我得到了这个错误:
self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "2647598550": "Shipment.order_id" must be a "Order" instance.
解决方案
您的示例循环应该这样做。您可以将 ID 指定为您想要的任何内容,只要您在调用之前执行此操作即可.save()
。构建实例.create(id=foo)
应该正是这样做的。
要设置外键字段,您可以首先get
使用带有 id 的相关实例Order.objects.get(id=order_id)
。
示例代码:
for shipment in shipments:
order = Order.objects.get(id=shipment.orderId)
shipment = Shipment.objects.create(id=shipment.shipmentId,
order_id=order)
推荐阅读
- angular - 不要在自定义元素之间共享 ngrxStore
- python - 我可以在循环时分配和访问 Tkinter 列表框中的变量吗?
- python - 屏幕上闪烁的 Python 框
- xml - 如何使用 XSLT 替换命名空间中的元素?
- excel - EXCEL:排除某些字符的唯一字母数字代码(无 VBA/重复项)
- jsf - 在 XPage 中使用 EL 在托管 bean 上调用带有参数的方法
- javascript - 如何延迟来自用户表单的 POST 请求,直到收到来自 Stripe 的 webhook POST 之后?
- javascript - 我怎样才能使它只有像版主这样的某些角色才能使用 kick 和 ban 命令?
- sql - 使用自定义错误抑制 PostgreSQL-Error 的方法
- javascript - 如何在 Element UI Input v2.x 中键入时发出值?