django:如何用orm连接没有外键的列

h43kikqp  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(354)

我´我是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_number 以及 dTo_order ?
我想要的结果是,我可以选择一个特定的订单,并从发货表中获取所有连接的发货,所有这些发货都将具有相同的dto\u订单。
我知道如何在larvel和mysql querie中实现这一点,但从我所听到的来看´使用原始查询不是“djangoish”。
有什么想法吗?
感谢阅读!如果我遗漏了什么,我很乐意提供所有必要的信息!:)
edit:我知道我可以尝试一种解决方法,通过在order表中搜索to\u order字段并获取该字段的主键,来获取装运订单的外键。然而,我很好奇是否有一个更优雅的解决方案,这在django。
更新:
这就是我的想象。
我从db那里得到命令 orders=Order.objects.all() .
我做了一些魔术,这样对于每个order对象,都会有一个数组或者其他什么数组,其中包含属于该订单的所有发货数据
我把数据传给我的模板。在这里,我想做一些类似的事情:
{%表示订单%}
{{订单号}
{%用于order.shippings%}
{{shipping.trackingno}}
{%endfor%}
{%endfor%}

nmpmafwu

nmpmafwu1#

你可以使用 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')))

相关问题