外键查询

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