Как сохранить файл 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 файл в базу данных. Пожалуйста, напишите код решения