Pau*_*oon 6 python django prefetch django-select-related
我想将模型属性预取到 Django 中的查询集。有没有办法做到这一点?
以下是三个模型:
class Place(models.Model):
name = models.CharField(max_length=200, blank=True)
@property
def bestpicurl(self):
try:
return self.placebestpic.picture.file.url
except:
return None
class PlaceBestPic(models.Model):
place = models.OneToOneField(Place)
picture = models.ForeignKey(Picture, on_delete=models.CASCADE)
class Picture(models.Model):
file = ImageField(max_length=500, upload_to="/images/")
Run Code Online (Sandbox Code Playgroud)
我需要类似的东西:
qs = Place.objects.all().select_related('bestpicurl')
Run Code Online (Sandbox Code Playgroud)
任何线索如何做到这一点?谢谢!
prefetch_related和select_related是编译到数据库查询中的指令。向其传递纯 Python 属性的名称不起作用,因为您的数据库无法了解它们。您必须选择/预取该属性在后台使用的数据库字段/关系:
qs = Place.objects.select_related(\'placebestpic\')\nRun Code Online (Sandbox Code Playgroud)\n\n现在,调用该属性将不会访问数据库:
\n\nfor p in qs:\n # do stuff with p.bestpicurl\nRun Code Online (Sandbox Code Playgroud)\n\n即使您在这里遵循反向关系,您也不会使用prefetch_related. 来自select_related文档:
\n\n您还可以在传递给 select_lated \xe2\x80\x94 的字段列表中引用 OneToOneField 的反向方向,即,您可以将 OneToOneField 遍历回定义该字段的对象。不要指定字段名称,而是使用相关对象上字段的 related_name。
\n
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |