У меня есть предопределенный список допустимого выбора:
allowed_choices = ['yes', 'no', 'I dont know']
Я работаю над API, использующим инфраструктуру отдыха Django.Для проверки и сериализации входных данных я использую поля Django.Для этого я выбрал MulitpleChoiceField
.
dataColumns = serializers.MultipleChoiceField(
choices=allowed_choices,
allow_blank=False,
source="data_Columns",
)
Мой взгляд выглядит следующим образом:
import json
# REST IMPORTS
from rest_framework import viewsets, response, status, serializers
# DJANGO IMPORTS
from django.http import HttpResponse
class TestSerializer(serializers.Serializer):
dataColumns = serializers.MultipleChoiceField(
choices=allowed_choices,
allow_blank=False,
source="data_Columns",
)
class TestViewSet(viewsets.ViewSet):
def list(self, request):
return response.Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def retrieve(self, request, pk=None):
return response.Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def update(self, request, pk=None):
return response.Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def partial_update(self, request, pk=None):
return response.Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def destroy(self, request, pk=None):
return response.Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
def create(self, request):
serializer = TestSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
try:
print(serializer.validated_data.get("data_Columns"))
json_return = json.dumps(["all good"])
return HttpResponse(json_return,
content_type='application/json')
except:
return HttpResponse(status=status.HTTP_500_INTERNAL_SERVER_ERROR,
content_type='application/json')
else:
return HttpResponse(json.dumps(serializer.errors),
content_type='application/json',
status=status.HTTP_400_BAD_REQUEST)
Если выполнить вызов API со следующим вводом json:
{
"dataColumns": ["no", "yes"]
}
Затем в validated_data
печатает ["yes", "no"]
.Однако вход был наоборот.Моя цель - сохранить этот порядок.На самом деле действительный выбор - гораздо большая вселенная, и я не могу (хочу), чтобы пользователь заставил мой заказ.