Python 为什么这是两个问题而不是一个问题?

Python 为什么这是两个问题而不是一个问题?,python,django,Python,Django,视图: 型号: transfer_details = TransferDetail.objects.filter(user=request.user).select_related('transfermethod_set') print transfer_details.filter(method__name='PayPal') 我希望第一行的transfer_details QuerySet可以在没有进一步数据库调用的情况下使用 我错过了什么 更新1 因此,我发现当我有这两行时,没有其他查

视图:

型号:

transfer_details = TransferDetail.objects.filter(user=request.user).select_related('transfermethod_set')

print transfer_details.filter(method__name='PayPal')
我希望第一行的transfer_details QuerySet可以在没有进一步数据库调用的情况下使用

我错过了什么

更新1

因此,我发现当我有这两行时,没有其他查询:

class TransferMethod(models.Model):
    name = models.CharField(max_length=30)
    ...


class TransferDetail(models.Model):
    data = models.TextField()
    ...
    method = models.ForeignKey(TransferMethod)
    user = models.ForeignKey(User)
但当我添加以下两行时,它会进行2 DB的查询:

    x = transfer_details.filter(method__name='PayPal')
    x2 = transfer_details.filter(method__name='Something')
引擎盖下发生了什么?我如何避免额外的呼叫

更新2

我试过:

    list(x[:1])
    list(x2[:1])
它还进行了两次查询。

应该是正确的(假设您还希望在一次查询中获取用户数据):

您不需要选择
method
,因为当您在
print transfer\u details.filter(method\u name='PayPal')
中对其进行筛选时,应该会自动选择它。当您调用
print
TansferDetail
时,将调用
\uuuuUnicode\uuuuuu
,因此额外的原因可能是您正在那里输出一些其他相关数据(例如,来自
用户
模型,这应该用上面的代码解决…)

回答编辑后的问题:如果在查询集上调用
list
,则查询集将获得,这意味着实际查询已完成

不知道您是否正在访问代码中以前的某个点上的
请求。user
,但如果不是这样,则第二个查询可能是获取当前请求的用户的结果。

应该是正确的(假设您还希望在一个查询中获取用户数据):

您不需要选择
method
,因为当您在
print transfer\u details.filter(method\u name='PayPal')
中对其进行筛选时,应该会自动选择它。当您调用
print
TansferDetail
时,将调用
\uuuuUnicode\uuuuuu
,因此额外的原因可能是您正在那里输出一些其他相关数据(例如,来自
用户
模型,这应该用上面的代码解决…)

回答编辑后的问题:如果在查询集上调用
list
,则查询集将获得,这意味着实际查询已完成

不知道您是否在代码之前的某个时间访问了
请求.user
,但如果不是这样,则第二个查询可能是获取当前请求的用户的结果

transfer_details.get(method__name='PayPal').data
...
transfer_details = TransferDetail.objects.filter(
    user=request.user).select_related('method', 'user')