在Django 的ORM实践中,灵活使用 Case-When 语句,能够帮助我们处理一些棘手问题。
例如,用户模型中有个头像字段。如果用户自己上传了头像,那么就使用这个头像。否则,需要根据用户性别,返回各自默认的男女头像。
这就非常适合 Case-When 语句来处理。
可以定义表达式为
avatar_url = Case(
When(avatar__exact='', then=Case(
When(gender='男', then=Value(default_avatar_boy)),
When(gender='女', then=Value(default_avatar_girl))
)),
default='avatar',
)
然后,利用 annotate 和 values ,就能实现基于数据库的逻辑运算,速度相对更快一些。
网友评论