Django: как передать условие .is_valid() без заполнения всех параметров

с классом TestQuestionList в функции post мне не нужно создавать новый объект, поэтому мне не нужны некоторые поля, но django требует, чтобы я заполнил эти поля

class TestQuestionList(APIView):
    def __init__(self):
        self.questions = [1]
    def get(self, request):
        romms = TestQuestionBlok.objects.filter(id__in=self.questions)
        serializer = TestQuestionSerializers(romms, many=True)
        return Response(serializer.data)
    def post(self, request, format=None):
        serializer1 = TestQuestionSerializers(data=request.data)
        if serializer1.is_valid() :
            self.questions = serializer1.data['questions']
            return Response(serializer1.data, status=status.HTTP_200_OK)
        return Response(serializer1.errors, status=status.HTTP_400_BAD_REQUEST)

Как я могу обойти эти требования?

Для получения нескольких объектов ваш API должен выглядеть следующим образом:

class YourAPI(APIView):
    class InputSerializer(serializers.Serializer):
        ...

        objects = serializers.PrimaryKeyRelatedField(
            queryset=YourResourceModel.objects.all(),
            required=False,
            allow_empty=True,
            allow_null=True
        )

        ...
    class OutputSerializer(serializers.ModelSerializer):
        class Meta:
            model = TestQuestionBlok
            fields = ('__all__')
    
    def post(self, request):
        serialzier = self.InputSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        
        return Response(serializer.validated_data)

Сериализаторы не обязательно должны быть частью вашего API, это просто пример. Однако, согласно некоторым руководствам по стилю, это хорошая практика.

Проверьте PrimaryKeyRelatedField

По сути, ваш FE передает PKs нужных вам объектов в виде массива в BE в переменную objects, вы можете назвать ее как угодно.

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