Как задать имена файлов с помощью запросов Python при загрузке файлов в Django Rest Framework?

Я использую Django Rest Framework.

Если у меня есть простая модель Django:

class MyModel(models.Model):
    file_field_1 = models.FileField(...)
    file_field_2 = models.FileField(...)

И простой сериализатор:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.MyModel
        fields = '__all__'

Я могу загружать файлы в эту конечную точку API с помощью Python'а requests следующим образом:

requests.post(
    URL,
    files={
        "file_field_1": pathlib.Path("some_file.txt").read_bytes(),
        "file_field_2": pathlib.Path("some_other_file.txt").read_bytes(),
    },
    headers={
        "Authorization": "Token {MY_TOKEN}",
    }
)

Это работает, но имена файлов, которые сохраняет Django, будут file_field_1 и file_field_2.

Я думаю, что есть способ requests сообщить Django, какое имя должно быть у каждого файла, используя заголовок Content-Disposition, но я не могу заставить его работать.

Как мне это сделать?

Очевидно, вы можете использовать кортеж, где первый элемент - имя файла, а второй - данные:

requests.post(
    URL,
    files={
        "file_field_1": ("my_first_file.txt", pathlib.Path("some_file.txt").read_bytes()),
        "file_field_2": ("my_second_file.txt", pathlib.Path("some_other_file.txt").read_bytes()),
    },
    headers={
        "Authorization": "Token {MY_TOKEN}",
    }
)

Я думаю, что это автоматически заставляет requests правильно устанавливать заголовки, чтобы сообщить Django, каким должно быть имя каждого файла.

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