gpt4 book ai didi

python - Django:如何使用 ORM 连接没有外键的列

转载 作者:行者123 更新时间:2023-11-29 02:10:50 27 4
gpt4 key购买 nike

我是 Django 和 Python 的新手,我无法找到解决此问题的方法,因此非常感谢您的帮助!

我正在尝试加入 Django 中的数据库列,它们确实具有相应的值,但该值不是外键。

假设我的模型是:

class Order(models.Model):
order_id = models.AutoField(primary_key=True)
oOrder_number = models.CharField(max_length=50)
...

class Shipment(models.Model):
dShipment_id = models.AutoField(primary_key=True)
dTo_order = models.CharField(max_length=10)
...

我所知道的是,我可以使用 Djangos select_related 命令从与外键连接的表中获取值。

但这是我的问题:我不能在我的模型中使用外键,原因是第三方软件通过我的 API 推送数据。该软件无法存储创建订单的返回值并将其用作发货的标识符 (...)。

最后我的问题是:是否可以使用相同的字段 oOrder_numberdTo_order 进行一些连接?

我想要的结果是,我可以选择某个订单并从装运表中获取所有关联的装运,它们都将具有相同的 dTo_order。

我知道如何在 Larvel 和 MySQL 查询中执行此操作,但据我所知,使用原始查询并不是“Djangoish”...。

有什么想法吗?

感谢阅读!如果我遗漏了什么,我会很乐意提供所有必要的信息! :)

编辑:我知道我可以尝试一种变通方法,通过在订单表中搜索 To_order 字段并获取它的主键来获取装运订单的 Foreign。但是我很好奇 Django 中是否有更优雅的解决方案。

更新:

这是我想象的。

  • 我从数据库中获取订单,如 orders=Order.objects.all()
  • 我做了一些魔术,这样对于每个订单对象,都会有一个数组或任何属于该订单的所有发货数据
  • 我将数据传递到我的模板。在这里我想做类似的事情:

    {% for order in orders %}

    {{Order.oOrder_no}}

    {% for shipment in order.shipments %}

    {{shipment.trackingno}}

    {% endfor %}

    {% endfor %}

最佳答案

您可以使用 Subquery expression使用 OuterRef:

from django.db.models import OuterRef, Subquery
shipments = Shipment.objects.filter(dTo_order=OuterRef('oOrder_number'))
Order.objects.annotate(shipments=Subquery(shipments.values('dShipment_id', 'trackingno')))

关于python - Django:如何使用 ORM 连接没有外键的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52969759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com