【问题标题】:Django left join with users tableDjango与用户表左连接
【发布时间】:2016-01-18 13:46:18
【问题描述】:

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

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    【讨论】:

    • 成功了。我无法访问模板中的 main_photo 列表,因此我不得不遍历将 main_photo[0] 重新分配给另一个变量的用户。谢谢。
    • 您可以使用{{ user.main_photo.0 }} 访问它。如果您认为这是解决方案,请将问题标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多