我是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
进行连接?
我希望得到的结果是,我可以选择一个特定的Order并从Shipment表中获取所有关联的托运,这些托运都具有相同的dTo_order。
我知道如何在Larvel和MySQL Querie中执行此操作,但是据我所知,使用原始查询不是“ Djangoish”...。
有什么想法吗?
感谢您的阅读!如果我遗漏了一些东西,我将很高兴提供所有必要的信息! :)
编辑:我知道我可以尝试一种变通办法,方法是在“订单”表中搜索“ To_order”字段并获取其主键,以获取装运订单的外部代码。但是我很好奇Django中是否有更优雅的解决方案。
更新:
这就是我的想象。
orders=Order.objects.all()
。我将数据传递给模板。然后我想在这里做类似的事情:
{订单中%的订单%}
{{Order.oOrder_no}}
{%为订单中的装运量。装运%}
{{shipment.trackingno}}
{%endfor%}
{%endfor%}
答案 0 :(得分:1)
您可以将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')))