簡體   English   中英

使用外鍵在Django ORM中加入兩個表

[英]join two tables in django ORM using foreign key

我是Django的初學者。 我遇到了通過Foregin Keys連接的模型的問題。

我有兩個模型“ Internalorder2”和“ Position3”,如下所述。 我想使用Django ORM加入表格。

應用程序/ models.py

class Internalorder2(models.Model):
   order_id = models.AutoField(primary_key=True)
   ticker = models.CharField(max_length=64)

   class Meta:
      managed = True
      db_table = 'internalorder2'

應用程序/ models.py

class Position3(models.Model):
   pos_id = models.AutoField(primary_key=True)
   parent_order = models.OneToOneField(Internalorder2, models.DO_NOTHING)
   action = models.CharField(max_length=4)

   class Meta:
      managed = True
      db_table = 'position3'

接下來,我填充了兩個表。 之后,我使用select_related函數運行查詢以提取跨越兩個表的查詢集。 我期望從查詢中看到queryset中的表Internalorder2的所有字段。 但是,queryset僅包含其自己的表position3中的字段。

python manage.py shell命令

from app.models.py import *
qs= Position3.objects.all().select_related("parent_order")

python shell結果

In [102]: qs[0].__dict__

Out[102]:
{'_parent_order_cache': <Internalorder2: Internalorder2 object>,
'_state': <django.db.models.base.ModelState at 0x13209f0>,
'action': 'B',
'parent_order_id': 1,
'pos_id': 1}

我可以使用以下命令從表Internalorder2中訪問字段:

python shell結果

In [112]: qs[0].parent_order.ticker
Out[112]: 'ACC'

但是,這不是我想要的。 我希望將來自foregin表的所有字段都添加到queryset,因為queryset會作為輸入饋入其他一些插件。

有什么解決方案只涉及對數據庫的查詢?

我仍然不能完全理解這個問題。 但是,通過2個模型與.OneToOneField鏈接,您可以像執行以下操作:

pos = Position3.objects.all()
# Got all the pos (you can do filter or something else
# then with the object pos, you can get the parent_order like:
order = pos.parent_order # Or for p in pos: or = p.parent_order
# And FK make one to many relationship, OneToOne ~> same way

你沒做錯什么 報價欄位於相關的InternalOrder字段中; 您可以通過new[0].parent_order.ticker訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM