如果字段存在,则Django过滤查询集

时间:2014-08-04 12:46:03

标签: mysql django django-models

在我的自定义管理器中,如果只有此字段具有值,我想过滤查询集:

class PropertyManager(gis_models.GeoManager):
    def get_queryset(self):
        return super(PropertyManager,self).get_queryset().filter(active=True, valid_until__gte = datetime.now())

问题是valid_until字段不是必需的,可能为null。所以我希望我的经理只有在对象创建期间设置了该字段的值时才过滤对象(valid_until__gte = datetime.now())。如果此值为null,我只希望管理器使用第一个过滤器(active=True)。

是否可以在Django中制作这样的原始SQL IF语句?我正在使用Mysql db。

2 个答案:

答案 0 :(得分:2)

您可以使用Q object来组合查找。

您可以进行过滤以查找valid_date > now() OR valid_date=None

的对象
.filter(Q(valid_until__gte = datetime.now()) | Q(valid_until=None))

答案 1 :(得分:0)

也可以排除所有不想要的结果,所以在你的情况下:

.filter(active=True).exclude(valid_until__lt=datetime.now())

这将排除valid_until设置为低于datetime.now()的所有结果,因此也会返回无值!