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