Django QuerySet:是否可以为FloatFields过滤field__is_null?

时间:2014-11-18 19:37:14

标签: django django-models

我希望能够在模型中查询特定浮点字段没有值的记录。问题是基本查询:

 Model.objects.filter(float_field__is_null=True)

返回以下错误:django.core.exceptions.FieldError: Unsupported lookup 'is_null'

要测试,请创建以下模型:

class FloatFieldModel(models.Model):
    date = models.DateField()
    val = models.FloatField(blank=True, null=True)

然后:

>>> objects = FloatFieldModel.objects.filter(val__is_null=True)
>>> django.core.exceptions.FieldError: Unsupported lookup 'is_null' ...

如何针对特定浮点字段没有值的记录过滤模型?换句话说,最好的工作是什么?

我希望能够做的是设置一个只更新没有任何值的行的例程,但跳过已经具有指定值的行(同时最有效地使用我的数据库)。我的尝试看起来像是:

for date in dates:
    try:
        FloatFieldModel.objects.filter(
            date=date,
            val__is_null=True
        ).update(val=42.0)
    except FloatFieldModel.DoesNotExist:
        pass

我想我可以做类似的事情:

objects = FloatFieldModel.objects.all()
for obj in objects:
    if obj.val is None and obj.date in set(dates):
        obj.val = 42.0
        obj.save()

我尝试的是一个更有效的过程,而不是在保存之前需要从数据库中将每个对象读入内存。

1 个答案:

答案 0 :(得分:17)

有查找isnull is_null https://docs.djangoproject.com/en/dev/ref/models/querysets/#std:fieldlookup-isnull

Model.objects.filter(float_field__isnull=True)