Как сохранить 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)
Это не csv формат так-то
Это csv файл со словарём
csv формат читается так
import csv
with open('file.csv', 'r', encoding='utf-8') as f:
data = csv.DictReader(f, delimiter=';')
Если прилетают данные в таком формате, то это ужас
Но если без вариантов, то читай построчно и преобразуй строку в словарь через literal_eval
Затем по ключам создавай запись в модель
