如何在Django查询中使用case语句

时间:2014-03-20 06:45:32

标签: python django

我正在开发项目,我必须将PostgreSQL查询转换为Django查询。我的问题是如何使用

select id,name, address_1, address_2, city,county,postcode,
        case when fuel = 't' then 'Yes'
        when fuel is null then 'No' else 'No' end as fuel,
        case when food = 't' then 'Yes'
        when food is null then 'No' else 'No' end as food,
        case when shower = 't' then 'Yes'
        when shower is null then 'No' else 'No' end as shower,
        case when toils = 't' then 'Yes'
        when toils is null then 'No' else 'No' end as toils,spaces, cost
        from park
        where type_id = 3 and state_id in (1,2)

使用额外方法执行此操作的一种方法

ModelName.objects.extra(select={"link_id": "case when link_id >0  then -3 else 0 end"})

但我认为这不是最佳方式。还有其他办法吗?

由于

1 个答案:

答案 0 :(得分:0)

由于这些值都不依赖于任何复杂的数据库逻辑,我会将逻辑移动到Python并简单地在模型上创建它们。

class MyModel(models.Model):
    ... id, name etc ...
    _shower = models.CharField(db_column="shower")

    @property
    def shower(self):
        return 'Yes' if self._shower else 'No'

......等等。