FileField Django REST Framework (DRF) ведет себя по-разному в универсальном представлении и APIView.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 FileField Django REST Framework (DRF) ведет себя по-разному в универсальном представлении и APIView.

Сообщение Anonymous »

Я хочу обрабатывать загрузку файлов в django.
Модель и сериализатор следующие:

Код: Выделить всё

def save_file(instance, filename):
_, ext = os.path.splitext(filename)
return f"{instance.id}{ext}"

class FileModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
title = models.CharField(max_length=64)
file = models.FileField(upload_to=save_file)
created = models.DateTimeField(auto_now_add=True)

class FileModelSerializer(serializers.ModelSerializer):
class Meta:
model = FileModel
fields = "__all__"
Когда я использую обобщенное представление следующим образом:

Код: Выделить всё

class FileListApi(generics.ListAPIView):
queryset = FileModel.objects.all()
serializer_class = FileModelSerializer
API будет таким, URL-адрес — это абсолютный путь:

Код: Выделить всё

[
{
"id": "2c5488ec-7b5d-45ab-9c43-058c19d76626",
"title": "file.png",
"file": "http://127.0.0.1:8000/media/2c5488ec-7b5d-45ab-9c43-058c19d76626.png",
"created": "2024-02-07T02:29:29.845808Z"
}
]
Однако, когда я использую APIView:

Код: Выделить всё

class FileListApi(APIView):
def get(self, request):
serializer = FileModelSerializer(FileModel.objects.all(), many=True)
return Response(serializer.data)
URL-адрес теперь является относительным путем:

Код: Выделить всё

[
{
"id": "2c5488ec-7b5d-45ab-9c43-058c19d76626",
"title": "file.png",
"file": "/media/2c5488ec-7b5d-45ab-9c43-058c19d76626.png",
"created": "2024-02-07T02:29:29.845808Z"
}
]
Я могу представить, что могут возникнуть ситуации, когда потребуется абсолютный или относительный путь, в моем конкретном случае я хочу использовать относительный путь.
Почему DRF ведут себя по-разному в представлении дженериков и APIView?
Как изменить выходной URL-адрес DRF?

Подробнее здесь: https://stackoverflow.com/questions/779 ... s-view-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»