使用外键连接Django-ORM中的两个表

2024-09-30 20:19:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的初学者。我面临着一个问题,模型是通过Foregin键连接起来的。在

我有两个模型“Internalorder2”和“Position3”,如下所述。 我想用Django ORM连接表。在

应用程序/模型.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'

应用程序/模型.py在

^{pr2}$

接下来,我填充了两个表。之后,我运行一个查询来提取 使用select_相关函数跨越两个表的查询集。 我希望从查询中看到queryset中表Internalorder2的所有字段。然而, queryset只包含它自己的表position3中的字段。在

Python管理.pyshell命令

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被输入到其他插件。在

有没有只涉及对数据库进行查询的解决方案?在


Tags: djangopy模型idtrue应用程序modelsorder
2条回答

我还是不能完全理解这个问题。但是,如果有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

你没做错什么。ticker字段在相关的InternalOrder字段中;您可以通过new[0].parent_order.ticker访问它。在

相关问题 更多 >