пытаюсь при помощи скрипта many_load.py переместить из таблицы данные в базу данных. При выполнении в консоли команды "python manage.py runscript many_load" выдает ошибку:
"Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword 'category' into fiel
d. Choices are: id, name, site"
Я понимаю, что программа не находит ключевое слово "category", и что выбор только из "id", "name", "site", но в модели "category" нет. Почему он его ищет? и как избежать этой проблемы?
models.py:
from django.db import models
class Category(models.Model) :
name = models.CharField(max_length=512)
def __str__(self) :
return self.name
class State(models.Model) :
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Region(models.Model):
name = models.CharField(max_length=128)
def __str__(self):
return self.name
class Iso(models.Model):
name = models.CharField(max_length=8)
def __str__(self):
return self.name
class Site(models.Model):
name = models.CharField(max_length=128)
description = models.CharField(max_length=256)
justification = models.CharField(max_length=256)
year = models.IntegerField(null=True)
longitude = models.DecimalField(max_digits=20, decimal_places=10, null=True)
latitude = models.DecimalField(max_digits=20, decimal_places=10, null=True)
area_hectares = models.DecimalField(max_digits=20, decimal_places=10,null=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
state = models.ForeignKey(State, on_delete=models.CASCADE)
region = models.ForeignKey(Region, on_delete=models.CASCADE)
iso = models.ForeignKey(Iso, on_delete=models.CASCADE)
def __str__(self) :
return self.name
many_load.py:
import csv #
from unesco.models import Category, State, Region, Iso, Site
def run():
fhand = open('unesco/whc-sites-2018-clean.csv')
reader = csv.reader(fhand)
next(reader) # Advance past the header
Category.objects.all().delete()
State.objects.all().delete()
Region.objects.all().delete()
Iso.objects.all().delete()
Site.objects.all().delete()
for row in reader:
print(row)
c, created = Category.objects.get_or_create(category=row[7])
s, created = State.objects.get_or_create(state=row[8])
r, created = Region.objects.get_or_create(region=row[9])
i, created = Iso.objects.get_or_create(iso=row[10])
try:
y = int(row[3])
except:
y = None
st = Site(name=row[0], description=row[1], justification=row[2],
year=y, longitude=row[4], latitude=row[5], area_hectares=row[6],
category=c, state=s, region=r, iso=i)
st.save()