Как использовать один и тот же вложенный сериализатор для создания и листинга - PullRequest
0 голосов
/ 08 мая 2020

Мне нужно использовать тот же сериализатор для создания и вывода списка .....

Вот мой сериализатор .....

class OfficeSerializer(ModelSerializer):
    employees = EmployeeSerializer(many=True, read_only=True)
    state = StateSerializer(read_only=True)
    country = CountrySerializer(read_only=True)
    class Meta:
        model = Office
        exclude = ['office_id']

Я использую этот сериализатор для перечисления office API ... Могу ли я использовать тот же сериализатор для создания?

Это мой views.py

class OfficeCreateView(CreateAPIView):
    queryset = Office.objects.order_by('id').all()
    serializer_class = OfficeSerializer

    def perform_create(self, serializer):
        serializer.save()

В этом случае все поля сохраняются, за исключением сотрудников, состояния, country et c ....

class OfficeSerializer(ModelSerializer):
    employees = EmployeeSerializer(many=True)
    state = StateSerializer()
    country = CountrySerializer()
    class Meta:
        model = Office
        exclude = ['office_id']

Если я удалю поле read_only, я получаю следующую ошибку в Postman

{
    "employees": [
        "This field is required."
    ],
    "state": [
        "This field is required."
    ],
    "country": [
        "This field is required."
    ]
}

Как решить эту проблему

1 Ответ

0 голосов
/ 08 мая 2020

В 'class Meta:' вы можете воспользоваться преимуществом 'read_only_fields = (, ...)'

...