python - Django-ForeignKey-如何正确使用它?

标签 python django django-models

我有以下数据库模型:

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专栏。

请注意

  1. 可能没有这样的Table2元素,或多个。在这两种情况下,这都会导致错误。如果您想检索全部(可能为空),您可以使用 .filter(..)超过.get(..) ;
  2. 这里self.sctg应该是str ing(或类似字符串的东西),因为 sctgTable1CharField .

以上将导致某种查询,例如:

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/

相关文章:

具有带宽限制的 scp/sftp 的 python 模块

python - Django 检查和备用 Docker Compose 文件 : Debug flag not being set?

django - 高级 Django 查询

python - 将两个数字的列表转换为数组的索引

合并重复元素的Python代码

python - 如何在导入时忽略某些Python模块?

python - Django 在速记渲染方法中添加自定义 header

python - Django 聚合。如何将其值渲染到模板中?

django - 单个应用程序中的 ValueError ('Related model %r cannot be resolved' % self.remote_field.model)

python - 使用当前模型 ID 上传 Django 管理文件