Проблема с POST с лицевой стороны. Метод не поддерживает доступные для записи поля с точками - PullRequest
0 голосов
/ 07 мая 2019

Я создаю поле с точками в моем сериализаторе.Я сделал это потому, что должен отображать имя значение внешнего ключа, а не значение ПК.Но когда я пытаюсь выполнить POST из внешнего интерфейса, djang выдает следующее: AssertionError в / api / my-api / Метод .create() по умолчанию не поддерживает доступные для записи поля с точечными источниками.Напишите явный метод .create() для сериализатора MySerializer или установите read_only=True для полей сериализатора с точечными источниками.

Итак, когда я устанавливаю read_only = True мой POST из внешнего интерфейса, чтобы запросить ноль для каждого поля изполя сериализатора с точками-источниками.

Это мой сериализатор:

class FcaWorksSerializer(serializers.ModelSerializer):
    fell_form = serializers.CharField(source="fell_form.name" )
    #...
    main_type = serializers.CharField(source="main_type.name")

    class Meta:
        model = FcaWorks
        fields = ('id_fca','wkod', 'main_type','fell_form','fell_type','kind',\
        'sortiment','vol_drew','use_type','fca_res','ed_izm','vol_les','act_name',\
        'obj_type','use_area','indicator','comment','date_report')

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

1 Ответ

1 голос
/ 08 мая 2019

Переопределить метод __init__() сериализатора на настроить условие сериализатора

class FcaWorksSerializer(serializers.ModelSerializer):
    <b>fell_form = serializers.CharField()</b>
    # ...
    <b>main_type = serializers.CharField()</b>

    class Meta:
        model = FcaWorks
        fields = ('id_fca', 'wkod', 'main_type', 'fell_form', 'fell_type', 'kind',
                  'sortiment', 'vol_drew', 'use_type', 'fca_res', 'ed_izm', 'vol_les', 'act_name',
                  'obj_type', 'use_area', 'indicator', 'comment', 'date_report')

    <b>def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.context['request'].method == 'GET':
            self.fields['fell_form'].source = "fell_form.name"
            self.fields['main_type'].source = "main_type.name"

    def create(self, validated_data):
        # here you will get the data
        fell_form = validated_data['fell_form']
        main_type = validated_data['main_type']</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...