Python 使用外键连接django ORM中的两个表

Python 使用外键连接django ORM中的两个表,python,django,django-models,django-orm,Python,Django,Django Models,Django Orm,我是Django的初学者。我面临着一个通过Foregin键连接的模型的问题 我有两个模型“Internalorder2”和“Position3”,如下所述。 我想使用Django ORM连接这些表 app/models.py app/models.py 接下来,我填充了这两个表。之后,我运行一个查询来提取 使用select_相关函数跨两个表的查询集。 我希望从查询中看到queryset中表Internalorder2的所有字段。然而 queryset只包含它自己的表position3中的字段 p

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

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

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

python manage.py shell命令 python shell结果 然而,这不是我想要的。我希望foregin表中的所有字段都添加到queryset中,作为 queryset作为输入提供给其他插件


任何只需要查询数据库的解决方案?

我仍然不能完全理解这个问题。但使用与.OneToOneField链接的2个模型,您可以像这样执行:

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\u order.ticker

就像@Daniel said一样,您可以这样做,并使用new[0]访问它。parent\u order.ticker。或者你可以像我说的那样,一步一步地做。对不起,请看一看我的问题。你的更新没有意义
select_related
会添加查询相关模型中的所有内容,但您仍然可以通过我描述的关系访问它们;因为ORM的全部要点是使用您定义的模型。如果您想询问如何将它们提供给“其他插件”,您应该显示该代码并解释输入需要是什么。
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'
from app.models.py import *
qs= Position3.objects.all().select_related("parent_order")
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}
In [112]: qs[0].parent_order.ticker
Out[112]: 'ACC'
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