Итак, я создал одноэлементный класс для хранения файла на моем сервере, который заменяется при каждом добавлении нового файла, но я получаю следующую ошибку, когда пытаюсь опубликовать новый файл в моей конечной точке загрузки. и я сузил его до того, когда я вызываю file_serializer.save ()
sqlite3.IntegrityError: сбой ограничения UNIQUE: api_app_onixfile.id
Models.py
class SingletonModel(models.Model):
class Meta:
abstract = True
def save(self, *args, **kwargs):
self.pk = 1
super(SingletonModel, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
pass
@classmethod
def load(cls):
obj, created = cls.objects.get_or_create(pk=1)
return obj
class OnixFile(SingletonModel):
onix_file = models.FileField(blank=False, null=False, validators=[validate_xml])
def __str__(self):
return self.onix_file.name
Views.py
from django.shortcuts import render
from rest_framework.parsers import FileUploadParser
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from .serializers import XMLFileSerializer
from .models import OnixFile
import onixcheck
from .utils import OnixParser
from django.http import JsonResponse
class FileUploadView(APIView):
parser_class = (FileUploadParser,)
def post(self, request, *args, **kwargs):
file_serializer = XMLFileSerializer(data=request.data)
if(file_serializer.is_valid()):
onix_file = request.data['onix_file']
onix_errors = onixcheck.validate(onix_file)
if len(onix_errors) > 0:
file_serializer.save()
print("Onix Errors")
return Response(onix_errors, status=status.HTTP_400_BAD_REQUEST)
else:
file_serializer.save()
print(OnixFile.load())
return Response(OnixFile.load().__str__(), status=status.HTTP_201_CREATED)
else:
return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Serializers.py
from rest_framework import serializers
from .models import OnixFile
class XMLFileSerializer(serializers.ModelSerializer):
class Meta:
model = OnixFile
fields = "__all__"
Я предполагал, что моя функция сохранения SingletonModel будет обрабатывать тот факт, что у меня не может быть уникального ПК перезаписав текущую функцию новой информацией.