如何设置Django模型字段的NoData值

时间:2018-10-19 03:51:07

标签: python django model

我刚刚意识到我上传到Django模型的数据集包含一个带有“ -999”的字段(称为“ A”),表示NoData。这使我无法进行计算,但是我不想完全将这些对象从过滤器中排除,仅用于计算,例如:objects.aggregate(Avg('A'))。

如何告诉我的Django模型将该值视为字段A的NoData?我看到null = True告诉Django将空值存储为NoData,但是当值= -999时如果应该存储Null会怎样?

如果没有直接的方法,最好/最有效的方法就是在我进行这些计算时仅使用exclude()吗?或者,也许我应该在数据库中进行某种替换,以将字段A中的-999转换为Null(如何?)。谢谢你

1 个答案:

答案 0 :(得分:0)

一种快速的解决方案是在汇总查询中使用exclude

YourModel.objects.exclude(a=-999).aggregate(Avg('a'))

如果要将-999值替换为None

  1. 使用正确的参数(例如:null = True)调整“模型”字段
  2. 进行模式迁移
  3. 做一个Data Migration

数据迁移将需要调用以下函数:

def update_nodata(apps, schema_editor):
    YourModel = apps.get_model('yourappname', 'YourModel')
    for obj in YourModel.objects.filter(a=-999):
        obj.a = None
        obj.save()