Как отправить список идентификаторов через multipart/form-data в Django REST FrameworkPython

Программы на Python
Ответить
Anonymous
 Как отправить список идентификаторов через multipart/form-data в Django REST Framework

Сообщение Anonymous »

Я работаю над API-интерфейсом Django REST Framework, где мне нужно отправить список идентификаторов в запросе multipart/form-data, чтобы создать связь «многие ко многим» в базе данных. Хотя при использовании JSON в качестве формата запроса все работает отлично, я сталкиваюсь с проблемами при переключении на multipart/form-data, поскольку список идентификаторов сериализуется неправильно.
Вот мой сериализатор:< /p>

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

class AddOrUpdateContractSerializer(serializers.ModelSerializer):
deputy_agent = serializers.ListField(
child=serializers.IntegerField(), required=False, allow_empty=False
)
product_type = serializers.ListField(
child=serializers.IntegerField(), required=False, allow_empty=False
)
referral_type = serializers.ListField(
child=serializers.IntegerField(), required=False, allow_empty=False
)
customer_id = serializers.IntegerField(required=False)

class Meta:
model = Contract
exclude = ["id", "product", "is_deleted", "state", "customer"]
Вот мое мнение

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

class AddContract(APIView):
@extend_schema(request=AddOrUpdateContractSerializer, tags=["contract"])
def post(self, request):
serialized_data = AddOrUpdateContractSerializer(data=request.data)
if serialized_data.is_valid(raise_exception=True):
service = ContractService(
serialized_data=serialized_data.validated_data, user=request.user
)
service.create_contract()
return Response(
status=status.HTTP_200_OK,
data={"detail": "contract created successfully"},
)
И сервис для создания контракта:

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

def create_contract(self):
items = ["customer_id", "deputy_agent", "product_type", "referral_type"]

customer = CustomerSelector.get_customer_by_id(
self.serialized_data.get("customer_id", None)
)
deputy_agent = self.serialized_data.get("deputy_agent", None)
product_type = self.serialized_data.get("product_type", None)
referral_type = self.serialized_data.get("referral_type", None)

self.remove_unnecessary_items(items)

contract = Contract(customer=customer, **self.serialized_data)

contract.full_clean()
contract.save()

if deputy_agent:
deputy_agents = DeputyAgent.objects.filter(id__in=deputy_agent)
contract.deputy_agent.add(*deputy_agents)

if product_type:
product_types = ComboBoxsOptions.objects.filter(id__in=product_type)
contract.product_type.add(*product_types)

if referral_type:
referral_types = ComboBoxsOptions.objects.filter(id__in=referral_type)
contract.referral_type.add(*referral_types)
ПРОБЛЕМА
При отправке данных в виде multipart/form-data такие списки, как заместитель_агента, тип_продукта и тип_рекомендации, полученные в виде строк, а не списков
Зачем мне нужны multipart/form-data
Я не могу использовать JSON, поскольку мне также нужно загружать файлы изображений вместе с эти идентификаторы в одном запросе.
Пример запроса

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

Content-Type: multipart/form-data

customer_id: 1
deputy_agent: [1, 2, 3]
product_type: [4, 5, 6]
image: 
Вопрос
Как правильно обрабатывать списки идентификаторов в multipart/form-data в Django REST Framework? Есть ли передовой опыт или обходной путь для этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -framework
Ответить

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

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

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

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

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