Как импортировать таблицу .csv с внешним ключом в базу данных django - PullRequest
0 голосов
/ 27 сентября 2018

Это мой первый проект Django, и у меня возникают проблемы с загрузкой данных из файла .csv в модель с внешним ключом.

Вот мои модели:

class Artist(models.Model):
    artistID = models.IntegerField(primary_key=True, null=False, unique=True)
    artistName = models.CharField(max_length=50)
    artistNotes = models.TextField(blank=True)

class Art(models.Model):
    artID = models.IntegerField(primary_key=True, null=False, unique=True)
    artistID = models.ForeignKey(Artist, db_column='artistID', on_delete=models.CASCADE, default = 1)
    title = models.CharField(max_length=100, default = "No Title Given")
    location = models.CharField(max_length=100)
    owner = models.CharField(max_length=50, blank=True)
    origin = models.CharField(max_length=150, blank=True)
    medium = models.CharField(max_length=50, blank=True)
    artNotes = models.TextField(blank=True)

Iнаписал представление, которое будет импортировать данные:

def importArt(request):
    myFile = open('misc/Art.csv', 'r')
    for line in myFile:
        line = line.split(',')
        temp = Art.objects.create()
        temp.artID = line[0]
        temp.artistID = line[1]
        temp.title = line[2]
        temp.location = line[3]
        temp.owner = line[4]
        temp.origin = line[5]
        temp.medium = line[6]
        temp.artNotes = line[7]
        temp.save()
    myFile.close()
    return render(request, 'dtccArt/importArt.html', {})

Эта стратегия хорошо работала для таблицы Artist, но я получаю ошибку: Невозможно назначить «2»: «Art.artistID» долженбыть экземпляром "Artist".

Моя первая строка данных выглядит следующим образом:

1,2,Wisdom & Knowledge,Main Library,College,Visiting Artist at DTCC 19??-19??,Stone Sculpture,,

Я исправил две ошибки, прежде чем добраться до этой застрявшей точки.Я добавил db_column = 'artistID' и default = 1 в поле ArtistID модели Art.Значение по умолчанию = 1 относится к неизвестному художнику в случае, если художник неизвестен для произведения искусства.

Может кто-нибудь объяснить, что означает сообщение об ошибке, какие-то советы о том, как его исправить, или более простой способ импорта данных .csv в существующую модель Django?

Заранее спасибо!Andrea

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

С помощью Ракеша я понял, как это сделать.Работает следующее представление:

def importArt(request):
    myFile = open('misc/Art.csv', 'r')
    for line in myFile:
        line = line.split(',')
        temp = Art.objects.create()
        temp.artID = line[0]
        if line[1] != '':
            temp.artistID = Artist.objects.get(pk = (line[1]))
        else:
            temp.artistID = Artist.objects.get(pk = 1)
        if line[2] != '':
            temp.title = line[2]
        else:
            temp.title = "Unknown"
        temp.location = line[3]
        temp.owner = line[4]
        temp.origin = line[5]
        temp.medium = line[6]
        temp.artNotes = line[7]
        temp.save()
    myFile.close()
    return render(request, 'dtccArt/importArt.html', {})

Поля ArtistID и Title являются обязательными для заполнения, поэтому я жестко прописал "Unknown" для отсутствующего Title.Исполнитель PK = 1 имеет Неизвестное имя.

0 голосов
/ 27 сентября 2018

Изменить

temp.artistID = line[1]

на

temp.artistID = Artist.objects.get(int(line[1]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...