Как сохранить файл csv в модели django?

Это моя модель

class CSV(models.Model):
    name = models.CharField(max_length=50, blank=True, null=True)
    height = models.CharField(max_length=50, blank=True, null=True)
    mass = models.CharField(max_length=50, blank=True, null=True)
    hair_color = models.CharField(max_length=50, blank=True, null=True)
    skin_color = models.CharField(max_length=50, blank=True, null=True)
    eye_color = models.CharField(max_length=50, blank=True, null=True)
    birth_year = models.CharField(max_length=10, blank=True, null=True)
    gender = models.CharField(max_length=10, blank=True, null=True)
    homeworld = models.CharField(max_length=255, blank=True, null=True)
    films = models.CharField(max_length=255, blank=True, null=True)
    species = models.CharField(max_length=255, blank=True, null=True)
    vehicles = models.CharField(max_length=255, blank=True, null=True)
    starships = models.CharField(max_length=255, blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    edited = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    url = models.CharField(max_length=255, blank=True, null=True)

    def __str__(self):
        return self.name

Это мои сериализаторы

from rest_framework import serializers


class FileUploadSerializer(serializers.Serializer):
    file = serializers.FileField()

class SaveFileSerializer(serializers.Serializer):
    
    class Meta:
        model = CSV
        fields = "__all__"

Это мое мнение

count = {'count': 0, "next_page": 1, 'dates': [],}

starwars = [count, ]

class PeopleView(generics.ListCreateAPIView):
    serializer_class = FileUploadSerializer

    def get(self, request):
        page = request.query_params.get('page', 1)
        if starwars[0]['next_page'] == int(page):
            url = f'https://swapi.dev/api/people/?page={page}'
            response = requests.get(url).json()
            starwars.append(response['results'])
            starwars[0]['count'] += 10
            starwars[0]['next_page'] += 1
            starwars[0]['dates'].append(datetime.today())
            with open('story.csv', 'w', encoding='utf-8') as file:
                file.write(str(starwars[0]))
                file.write('\n')
                #csv.DictReader(file, delimiter=';')
                for i in range(1, len(starwars)):
                    for j in starwars[i]:
                        file.write(str(j))
                        file.write('\n')
            return Response(starwars, status=status.HTTP_200_OK)
        return Response({"error": "Enter valid page"})

    def post(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        file = serializer.validated_data['file']
        reader = pd.read_csv(file, skiprows=2, header=None)
        for _, row in reader.iterrows():
            new_file = CSV(
                       name = row['name'],
                       height= row["height"],
                       mass= row["mass"],
                       hair_color= row["hair_color"],
                       skin_color= row["row"],
                       eye_color= row["eye_color"],
                       birth_year= row["birth_year"],
                       gender= row["gender"],
                       homeworld= row["homeworld"],
                       films= row["films"],
                       species= row["species"],
                       vehicles= row["vehicles"],
                       starships= row["starships"],
                       craeted= row["created"],
                       edited= row["edited"],
                       url= row["url"],
                       )
            new_file.save()
        return Response({"status": "success"},
                        status.HTTP_201_CREATED)

Этот файл я получаю по запросу и записываю в csv.file и в то же время я добавляю туда свои значения {'count': 10, 'next_page': 2, 'dates': [datetime.datetime(2022, 3, 29, 12, 28, 19, 365395)]}

На этой неделе я получил слишком много ошибок (пример: pandas.errors.ParserError: Ошибка токенизации данных. Error C: Expected 21 fields on line 4, saw 22) Я ничего не понимаю, как загрузить этот csv файл в базу данных. Пожалуйста, напишите код решения

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