我正在使用python Django中的系统,我必须用他们的个人资料图片获取用户列表。我有一个包含用户照片的模型。用户可以上传多张照片,并且只能将其中一张照片设置为个人资料照片。
这是我的照片模型
from django.contrib.auth.models import User
class Photo(models.Model):
image = models.FileField(upload_to='images')
user = models.ForeignKey(User)
is_main = models.BooleanField(default=False)
date_added = models.DateTimeField(auto_now_add=True)
我想为每个用户提取所有用户和主要照片。类似于以下查询:
SELECT * FROM `users` `u`
LEFT JOIN `photos` `p`
ON `u`.`id`=`p`.`user_id`
AND `p`.`is_main`=True
上述查询的Django ORM是什么?
答案 0 :(得分:3)
使用自定义Prefetch
对象:
photos = Prefetch('photo_set',
queryset=Photo.objects.filter(is_main=True),
to_attr='main_photo')
users = User.objects.all().prefetch_related(photos)
for user in users:
# user.main_photo[0] contains the photo