Импорт CSV-файла с NULL-значениями в Django Models

Я импортирую файлы csv в модели Django с помощью BaseCommand, например: load_data.py

import csv
from django.core.management import BaseCommand
from api.models import Location, LocationData

class Command(BaseCommand):
    help = "Load data from csv file into database"

    def add_arguments(self, parser):
        parser.add_argument('--path', type=str)

    def handle(self, *args, **kwargs):
        path = kwargs['path']
        with open(path, 'rt') as f:
            reader = csv.reader(f, dialect="excel")
            next(reader, None)
            for row in reader:
                LocationData.objects.create(
                    location = Location.objects.get(name=row[1]),
                    date = row[2],
                    hour = row[3],
                    measurement = row[4] if row[4] else None
                )

Столбец measurement имеет пустые/NULL значения, поэтому я настроил models.py следующим образом:

class LocationData(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    date = models.DateField()
    hour = models.PositiveSmallIntegerField(
        validators=[
            MinValueValidator(0),
            MaxValueValidator(24)
        ],
    )
    measurement = models.FloatField(default=None, null=True, blank=True)

    def __str__(self):
        return self.name

Однако, когда я пытаюсь использовать load_data.py, который я создал, это приводит к ошибке:

django.db.utils.IntegrityError: NOT NULL constraint failed: api_locationdata.measurement

Что я пробовал: Удаление файлов миграции и повторная миграция с помощью python manage.py makemigrations, но ошибка все равно возникает. Что я упускаю?

Я предполагаю, что вы выполнили миграцию после makemigrations? Ваша база данных рассинхронизирована, вероятно, после удаления файлов миграции. Если у вас нет данных, создайте базу данных снова и выполните миграции. В противном случае вам придется делать все вручную

Вернуться на верх