Невозможно создать список экземпляров модели (опыт)

#django #django-rest-framework #django-views #django-serializer

#django #django-rest-framework #django-представления #django-сериализатор

Вопрос:

Я пытаюсь создать несколько экземпляров, т.Е. Опыт для одного и того же пользователя, но не могу этого сделать. Вместо этого я должен дважды нажать URL-адрес, чтобы добавить несколько данных.

serialzers.py

 class WorkExperienceSerialzer(BaseModelSerializer):

hidden_fields_to_add = {"created_by": None, "user": None}

    class Meta(BaseModelSerializer.Meta):
        model = WorkExperienceData
        fields = [
            "company",
            "designation",
            "description",
            "from_date",
            "to_date",
            "reference_name",
            "reference_mailid",
            "user",
            "id",
            ]
        extra_kwargs = {
            "user": {"read_only": True},
        }

    def __init__(self, *args, **kwargs):
        many = kwargs.pop('many', True)
        super(WorkExperienceSerialzer, self).__init__(many=many, *args, **kwargs)

    def create(self, validated_data, **kwargs):
            instance = super(WorkExperienceSerialzer, self).create(validated_data)
            return instance

    def update(self, instance, validated_data):
        instance = super(WorkExperienceSerialzer, self).update(
            instance, validated_data
            )
        return instance

    def get_default_value_for_field(self, field):

        value = super(WorkExperienceSerialzer, self).get_default_value_for_field(
            field
        )

        if not value:
            if field == "user":
                value = self.context["request"].user

        return value
  

views.py

 class WorkExperienceViewSet(ViewListUpdateDeleteViewSet, BaseModelViewSet):
    queryset = WorkExperienceData.objects.all()
    serializer_class = WorkExperienceSerialzer

    def get_serializer(self, *args, **kwargs):
        if "data" in kwargs:
            data = kwargs["data"]

        # check if many is required
        if isinstance(data, list):
            kwargs["many"] = True

    return super(WorkExperienceViewSet, self).get_serializer(*args, **kwargs)
  

Но когда я пытаюсь передать данные, как показано ниже

          [
    {
        "company": "something",
        "designation": "something",
        "description": "something",
        "from_date": "2020-10-15",
        "to_date": "2020-11-14",
        "reference_name": "something",
        "reference_mailid": "something@gmail.com"
    },
    {
        "company": "nothing",
        "designation": "nothing",
        "description": "nothing",
        "from_date": "2020-10-25",
        "to_date": "2020-10-27",
        "reference_name": "nothing",
        "reference_mailid": "nothing@gmail.com"
    }
]
  

Я получаю что-то вроде этого

Объект ‘ListSerializer’ не может быть итерирован

Я попытался изменить представления, добавив many=True, но затем также не работает

Ответ №1:

В вашем JSON есть две завершающие запятые, которые не разрешены в JSON (но разрешены в Python)

Попробуйте это:

 [
    {
        "company": "something",
        "designation": "something",
        "description": "something",
        "from_date": "2020-10-15",
        "to_date": "2020-11-14",
        "reference_name": "something",
        "reference_mailid": "something@gmail.com"
    },
    {
        "company": "nothing",
        "designation": "nothing",
        "description": "nothing",
        "from_date": "2020-10-25",
        "to_date": "2020-10-27",
        "reference_name": "nothing",
        "reference_mailid": "nothing@gmail.com"
    }
]