我有以下数据库模型:
class Table1( models.Model ):
sctg = models.CharField(max_length=100, verbose_name="Sctg")
emailAddress = models.CharField(max_length=100, verbose_name="Email Address", default='')
def __unicode__(self):
return str( self.sctg )
class Table2( models.Model ):
sctg = models.ForeignKey( Table1 )
street = models.CharField(max_length=100, verbose_name="Street")
zipCode = models.CharField(max_length=100, verbose_name="Zip Code")
def __unicode__(self):
return str( self.sctg )
我想执行选择查询。 这就是我所做的:
sctg = Table1.objects.get( sctg = self.sctg )
data = Table2.objects.get( sctg = sctg )
它可以工作,但现在我正在执行 2 个查询。是否有机会仅在一次中做到这一点?在原始 SQL 中,我会执行 JOIN 查询,但不知道如何在 Django 模型中执行此操作。
最佳答案
您可以使用两个连续下划线来“浏览”ForeignKey
引用。所以你的查询相当于:
Table2.objects.get(sctg<b>__sctg</b>=self.sctg)
非粗体部分因此可以查看 ForeignKey
,而粗体部分对应于 CharField
专栏。
请注意
- 可能没有这样的
Table2
元素,或多个。在这两种情况下,这都会导致错误。如果您想检索全部(可能为空),您可以使用.filter(..)
超过.get(..)
; - 这里
self.sctg
应该是str
ing(或类似字符串的东西),因为sctg
的Table1
是CharField
.
以上将导致某种查询,例如:
SELECT t2.*
FROM table2 AS t2
INNER JOIN table1 AS t1 ON t2.sctg = t1.id
WHERE t1.sctg = 'mysctg'
哪里'mysctg'
是存储在你身上的值self.sctg
.
关于python - Django-ForeignKey-如何正确使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51403157/