#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"
}
]