我刚刚意识到我上传到Django模型的数据集包含一个带有“ -999”的字段(称为“ A”),表示NoData。这使我无法进行计算,但是我不想完全将这些对象从过滤器中排除,仅用于计算,例如:objects.aggregate(Avg('A'))。
如何告诉我的Django模型将该值视为字段A的NoData?我看到null = True告诉Django将空值存储为NoData,但是当值= -999时如果应该存储Null会怎样?
如果没有直接的方法,最好/最有效的方法就是在我进行这些计算时仅使用exclude()吗?或者,也许我应该在数据库中进行某种替换,以将字段A中的-999转换为Null(如何?)。谢谢你
答案 0 :(得分:0)
一种快速的解决方案是在汇总查询中使用exclude
:
YourModel.objects.exclude(a=-999).aggregate(Avg('a'))
如果要将-999值替换为None
:
数据迁移将需要调用以下函数:
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()