外键查询
Foreign Key Query
我有以下型号:
class status(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
#data
class next(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sender')
target = models.ForeignKey(User, on_delete=models.CASCADE, related_name='target')
#data
class settings(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
#data
并希望使用以下输出查询下一个和状态:next,nextdata,status(target)
=> 将目标状态附加到(下一个)查询集
这可以通过 Django 查询实现吗?或者我应该只写原始 SQL
#
编辑:
此查询中的发件人始终是 current.user,
每个用户都有 1 个状态
#
干杯,
凯斯洛尔
如果您正在查询 "next" 模型,您可以通过 select_related 或值抓取来抓取状态数据。您可能应该在您的状态模型上向用户添加一个 related_name 参数。这里有两种方式(在你添加 related_name 作为状态之后):
Select相关
for next_instance in next.objects.filter(...).select_related('target__status'):
# next_instance data is accessible directly through instance attributes
next_instance.id
# Because we select_related status, no extra query is done to grab the data for target
# or status
next_instance.target.status.id
小提示,这里用select_related代替prefetch_related,因为我们遍历FROM many TO 1。如果我们从 User 到 next(1 到 many),我们将不得不使用 prefetch_related,我们将无法保证只有一个结果.
值
data = next.objects.filter(...).values(
# fields you want as string arguments
'id',
'target__status__id'
)
# Data will be a Queryset that if you iterate through will be iterating through
# dictionaries that contain key value pairs for the fields you put in values.
进一步阅读:
这是 select_related 的查询集文档:
https://docs.djangoproject.com/en/3.0/ref/models/querysets/#select-related
这是值的查询集文档:
https://docs.djangoproject.com/en/3.0/ref/models/querysets/#values
我有以下型号:
class status(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
#data
class next(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sender')
target = models.ForeignKey(User, on_delete=models.CASCADE, related_name='target')
#data
class settings(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
#data
并希望使用以下输出查询下一个和状态:next,nextdata,status(target)
=> 将目标状态附加到(下一个)查询集
这可以通过 Django 查询实现吗?或者我应该只写原始 SQL
#编辑: 此查询中的发件人始终是 current.user, 每个用户都有 1 个状态
#干杯, 凯斯洛尔
如果您正在查询 "next" 模型,您可以通过 select_related 或值抓取来抓取状态数据。您可能应该在您的状态模型上向用户添加一个 related_name 参数。这里有两种方式(在你添加 related_name 作为状态之后):
Select相关
for next_instance in next.objects.filter(...).select_related('target__status'):
# next_instance data is accessible directly through instance attributes
next_instance.id
# Because we select_related status, no extra query is done to grab the data for target
# or status
next_instance.target.status.id
小提示,这里用select_related代替prefetch_related,因为我们遍历FROM many TO 1。如果我们从 User 到 next(1 到 many),我们将不得不使用 prefetch_related,我们将无法保证只有一个结果.
值
data = next.objects.filter(...).values(
# fields you want as string arguments
'id',
'target__status__id'
)
# Data will be a Queryset that if you iterate through will be iterating through
# dictionaries that contain key value pairs for the fields you put in values.
进一步阅读:
这是 select_related 的查询集文档: https://docs.djangoproject.com/en/3.0/ref/models/querysets/#select-related
这是值的查询集文档: https://docs.djangoproject.com/en/3.0/ref/models/querysets/#values