我试图获取django模型的属性,遵循3个表之间的外键关系。 我的SQL查询就是这样:
select
DATABASE.TABLE1.id, DATABASE.TABLE3.name
from
DATABASE.TABLE1
Inner Join
DATABASE.TABLE2 ON DATABASE.TABLE2.TABLE1_id = DATABASE.TABLE1.id
Inner Join
DATABASE.TABLE3 ON DATABASE.TABLE2.TABLE3_id = DATABASE.TABLE3.id
如何使用django执行此查询?我也想在一个查询集中执行此操作。可能吗?
谢谢!
P.S.- TABLE2 拥有 TABLE1 和 TABLE3 的外键。
编辑1 - Models.py
class Table1(models.Model):
id = models.AutoField(db_column='id', primary_key=True)
name = models.CharField(db_column='name', max_length=45)
class Meta:
app_label = 'App'
db_table = 'Table1'
class Table2(models.Model):
id = models.AutoField(db_column='id', primary_key=True)
table1 = models.ForeignKey(table1 , db_column='TABLE1 _ID')
table2 = models.ForeignKey(table2, db_column='TABLE2_ID')
class Meta:
app_label = 'App'
db_table = 'Table2'
class Table3(models.Model):
id = models.AutoField(db_column='id', primary_key=True)
name = models.CharField(db_column='name', max_length=45)
class Meta:
app_label = 'App'
db_table = 'Table3'
我想要获取变量TABLE1.id和TABLE3.name。
答案 0 :(得分:1)
事情是,没有""""" Table3.name,因为你实际上是多对多的关系。对于Table1的每个实例,您有许多Table3实例,反之亦然。
但是,为单个Table1实例获取 all Table3.name值非常简单。 最简单的方法是为多对多关系添加一个显式声明 - 请注意,这只是一个逻辑字段,不需要任何架构更改。
class Table1(models.Model):
...
table3s = models.ManyToManyField('Table3', through='Table2')
现在你可以这样做:
my_table_1.table3s.values_list('name', flat=True)
(我假设您的Table2声明应该有一个FK到Table3,而不是回到自身,这只是示例中的一个错误。)