python - Django:如何使用 ORM 连接没有外键的列
问题描述
我是 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)
...
我所知道的是,我可以使用 Djangosselect_related
命令从与外键连接的表中获取值。
但这是我的问题:我不能在我的模型中使用外键,原因在于第三方软件通过我的 API 推送数据。该软件无法存储已创建订单的返回值并将其用作货件的标识符 (...)。
所以最后这是我的问题:是否可以使用相同的字段oOrder_number
和进行一些连接dTo_order
?
我想要的结果是,我可以选择某个订单并从 Shipment 表中获取所有连接的货件,它们都将具有相同的 dTo_order。
我知道如何在 Larvel 和 MySQL 查询中做到这一点,但据我所知,使用原始查询并不是“Djangoish”......
有什么想法吗?
谢谢阅读!如果我遗漏了什么,我很乐意提供所有必要的信息!:)
编辑:我知道我可以尝试一种解决方法,通过在 Order 表中搜索 To_order 字段并获取它的主键来获取装运订单的 Foreign 。但是我很好奇Django中是否有更优雅的解决方案。
更新:
这是我的想象。
- 我从数据库中获取订单,例如
orders=Order.objects.all()
. - 我做了一些魔术,以便对于每个订单对象,都会有一个数组或属于订单的所有发货数据的数组
我将数据传递给我的模板。在这里,我想做类似的事情:
{% for order in order %}
{{Order.oOrder_no}}
{% for shipping in order.shipments %}
{{shipment.trackingno}}
{% endfor %}
{% endfor %}
解决方案
您可以使用以下Subquery
表达式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')))
推荐阅读
- ios - SwiftUI-无法将视图拖到 ScrollView 之外
- excel - 查找具有特定值的最后一列
- c - 正则表达式拒绝字符串的问题
- javascript - React 中的组件轮播?
- python - 使用python执行adb命令
- websocket - Excel office 插件 + React - websockets 的安全错误
- reactjs - 自动完成 Mui 测试,模拟更改不起作用
- linux - 通过特定网络接口路由 HTTP
- python - 如何让方法在类外查找类内部以进行范围界定
- python - 如何对时间实例进行分组、查找其持续时间并根据特定条件求和(在 R 或 Python 中)