看法:
transfer_details = TransferDetail.objects.filter(user=request.user).select_related('transfermethod_set')
print transfer_details.filter(method__name='PayPal')
楷模:
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)
我希望使用第一行的 transfer_details QuerySet 而无需进一步的数据库调用。
我错过了什么?
更新 1
所以我发现当我有这两行时没有额外的查询:
x = transfer_details.filter(method__name='PayPal')
x2 = transfer_details.filter(method__name='Something')
但是当我添加以下两行时,它会进行 2 个数据库查询:
list(x[:1])
list(x2[:1])
幕后发生了什么以及如何避免额外的电话?
更新 2
我试过了:
transfer_details.get(method__name='PayPal').data
...
它还进行了两个查询。