使用外键连接django ORM中的两个表
join two tables in django ORM using foreign key
我是 Django 的初学者。我遇到了通过 Foregin Keys 连接的模型的问题。
我有两个型号 "Internalorder2" 和 "Position3",如下所述。
我想加入 table 使用 Django ORM 的行列。
app/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'
app/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'
接下来我填充了两个 table。之后,我 运行 一个要提取的查询
使用 select_related 函数跨越两个 table 的查询集。
我期望从查询中看到查询集中 table Internalorder2 的所有字段。然而,
查询集只包含来自它自己的 table,位置 3 的字段。
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}
我可以访问
来自 table Internalorder2 的字段使用命令:
python shell 结果
In [112]: qs[0].parent_order.ticker
Out[112]: 'ACC'
然而,这不是我想要的。我希望将 foregin table 中的所有字段添加到查询集中,因为
查询集作为输入提供给其他一些插件。
任何涉及只查询数据库的解决方案?
这个问题我还是不能完全理解。但是使用 .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
你没有做错任何事。 ticker 字段在相关的 InternalOrder 字段中;您可以通过 new[0].parent_order.ticker
.
访问它
我是 Django 的初学者。我遇到了通过 Foregin Keys 连接的模型的问题。
我有两个型号 "Internalorder2" 和 "Position3",如下所述。 我想加入 table 使用 Django ORM 的行列。
app/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'
app/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'
接下来我填充了两个 table。之后,我 运行 一个要提取的查询 使用 select_related 函数跨越两个 table 的查询集。 我期望从查询中看到查询集中 table Internalorder2 的所有字段。然而, 查询集只包含来自它自己的 table,位置 3 的字段。
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}
我可以访问 来自 table Internalorder2 的字段使用命令:
python shell 结果
In [112]: qs[0].parent_order.ticker
Out[112]: 'ACC'
然而,这不是我想要的。我希望将 foregin table 中的所有字段添加到查询集中,因为 查询集作为输入提供给其他一些插件。
任何涉及只查询数据库的解决方案?
这个问题我还是不能完全理解。但是使用 .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
你没有做错任何事。 ticker 字段在相关的 InternalOrder 字段中;您可以通过 new[0].parent_order.ticker
.