Как сохранить csv в модели django (star.csv:1: expected 17 columns but found 10 - filling the rest with NULL INSERT failed: datatype mismatch)

Я хочу загрузить файл csv в модель джанго но при каждой моей попытке он выдает вот эту ошибку star.csv:1: expected 17 columns but found 10 - filling the rest with NULL star.csv:1: INSERT failed: datatype mismatch. Возможно ошибка в модели как и говорит ошибка я перепробывал уже кучу советов на эту тему помогите

моя модель

class StarWars(models.Model):
    name = models.CharField('Имя', max_length=255, null=True, blank=True)
    height = models.IntegerField('Рост', null=True, blank=True)
    mass = models.IntegerField('Вес', null=True, blank=True)
    hair_color = models.CharField('Цвет волос', max_length=255, null=True, blank=True)
    skin_color = models.CharField('Цвет кожи', max_length=255, null=True, blank=True)
    eye_color = models.CharField('Цвет глаз', max_length=255, null=True, blank=True)
    birth_year = models.CharField('Год рождения', max_length=255, null=True, blank=True)
    gender = models.CharField('Пол', max_length=255, null=True, blank=True)
    homeworld = models.URLField('Родной мир', max_length=255, null=True, blank=True)
    films = models.URLField('Фильм', max_length=200, null=True, blank=True)
    species = models.CharField('Разновидность', max_length=255, null=True, blank=True)
    vehicles = models.CharField('Транспортные средства', max_length=200, null=True, blank=True)
    starships = models.URLField('Звездолеты', max_length=200, null=True, blank=True)
    created = models.DateTimeField(auto_now=True, null=True, blank=True)
    edited = models.DateTimeField(auto_now=True, null=True, blank=True)
    url = models.URLField('Url', max_length=200, null=True, blank=True)

моя вьюха и от куда я беру данные (https://swapi.dev/api/people/)

star = []


class StarView(APIView):

def get(self, request):
    page = request.query_params.get('page', 1)
    url = f'https://swapi.dev/api/people/?page={page}'
    response = requests.get(url).json()
    star.append(response['results'])
    with open('star.csv', 'w') as file:
        # file.write(str(star))
        # file.write('\n')
        for i in range(1, len(star)):
            for j in star[i]:
                file.write(str(j))
                file.write('\n')
    return Response(star, status=status.HTTP_200_OK)

Мой cvs и база данных 17 полей  - expected 17 columns but found 10

Это не csv формат так-то

Это csv файл со словарём

csv формат читается так

import csv
with open('file.csv', 'r', encoding='utf-8') as f:
    data = csv.DictReader(f, delimiter=';')

Если прилетают данные в таком формате, то это ужас

Но если без вариантов, то читай построчно и преобразуй строку в словарь через literal_eval

Затем по ключам создавай запись в модель

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