Skip to main content
 首页 » 编程设计

python之Django 左加入用户表

2024年08月23日33dyllove98

我正在使用 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 是什么?

请您参考如下方法:

使用自定义 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