Импорт 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? Ваша база данных рассинхронизирована, вероятно, после удаления файлов миграции. Если у вас нет данных, создайте базу данных снова и выполните миграции. В противном случае вам придется делать все вручную