Как установить значение NoData поля модели Django - PullRequest
0 голосов
/ 19 октября 2018

Я только что понял, что набор данных, который я загрузил в модель Django, имеет поле (назовите его «A») с «-999», которое указывает NoData.Это отбрасывает мои расчеты, но я не хочу полностью исключать эти объекты из моих фильтров, просто для вычислений, например: objects.aggregate (Avg ('A')).

Как мне сказать моей модели Django обрабатывать это значение как NoData для поля A?Я вижу, что null = True говорит Django хранить пустые значения как NoData, но что, если он должен хранить Null, когда значения = -999.использовать exclude () всякий раз, когда я делаю эти вычисления?Или, может быть, я должен сделать какую-то замену в моей базе данных, чтобы преобразовать -999 в поле A в ноль (как?).Я благодарю вас

1 Ответ

0 голосов
/ 20 октября 2018

Быстрое решение - использовать exclude в ваших совокупных запросах:

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

Если вы хотите заменить значения -999 на None:

  1. Настройте поле модели с правильными параметрами (например, null = True)
  2. Выполните миграцию схемы
  3. Выполните Миграцию данных

Миграция данных должна вызывать функцию, например:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...