#django #django-rest-framework
#django #django-rest-framework
Вопрос:
Я пытаюсь написать библиотечное приложение на django rest framework. У меня есть две модели: File и Book:
class File(models.Model):
file = models.FileField(upload_to="books//%Y/%m/")
class Book(models.Model):
filename = models.CharField(max_length=100)
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
year = models.IntegerField()
path = models.TextField()
isbn = models.CharField(max_length=100)
tags = models.TextField(max_length=200)
last_access = models.BinaryField()
cover_image = models.BinaryField()
upload_date = models.DateTimeField(auto_now=True, db_index=True)
owner = models.ForeignKey('auth.User', related_name='uploaded_files', on_delete=models.CASCADE)
size = models.IntegerField(default=0)
def __str__(self):
return self.author ' - ' self.title
Сериализатор и просмотр
class FileSerializer(serializers.ModelSerializer):
class Meta:
model = File
fields = "__all__"
class FileViewSet(viewsets.ModelViewSet):
queryset = File.objects.all()
serializer_class = FileSerializer
permission_classes = [permissions.IsAuthenticated]
Как я могу открыть загруженный файл в ModelViewSet? Или я должен использовать общий APIView, чтобы переопределить операцию ввода / вывода для моих нужд?
Ответ №1:
Это просто.
class AddFile(APIView):
parser_classes = (MultiPartParser, FormParser)
def post(self, request, *args, **kwargs):
file_serializer = FileSerializer(data=request.data)
if file_serializer.is_valid():
file_serializer.save()
file_path = media_root file_serializer.data['file']
with open(file_path, 'r') as f:
# do something with file
return Response(file_serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Корень носителя получить из настроек.MEDIA_ROOT и обрезка.