我有以下型号:
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 Query吗?还是我应该只写原始SQL
#编辑:此查询中的发件人始终是当前用户。每个用户的状态恰好为1
#欢呼,keslol
如果要查询“下一个”模型,则可以通过select_related来获取状态数据,也可以通过值来获取。您可能应该在状态模型上向用户添加related_name参数。这有两种方法(在将related_name添加为状态之后):
选择相关
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,因为我们要遍历从多到多1。如果我们是从用户到下一(多到一),则必须使用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相关的Queryset文档:https://docs.djangoproject.com/en/3.0/ref/models/querysets/#select-related
这是Queryset文档中的值:https://docs.djangoproject.com/en/3.0/ref/models/querysets/#values