Почему у меня в django rest framework нет кнопки для динамического добавления вложенных данных формы, если должна быть?

Прошу о помощи

Взгляните на скрин пожалуйста, не могу понять почему не могу добавлять links динамически:

введите сюда описание изображения

**Вот такой вид данных формата Json должен получиться:

values {
    "firstname": "l",
    "lastname": "m",
    "links": [
        {
          "linkname": "https://www.youtube.com/",
          "linkurl": "https://www.youtube.com/"
        },
        {
          "linkname": "https://www.youtube.com/",
          "linkurl": "https://www.youtube.com/"
        }
    ]
}

И к тому же даже если вот эти все существующие поля заполнить(ну то есть те поля, которые уже есть в django rest framework, а именно - один массив links и Имя вместе с Фамилией) выводится ошибка:

The .create() method does not support writable nested fields by default. Write an explicit .create() method for serializer schedule.serializers.WorkSuperSerializer, or set read_only=True on nested serializer fields.

Я перебирала очень много вариантов решения проблемы, например объявляла метод create():

def create(self, validated_data):
    links_data = validated_data.pop('links')
    worksuper = WorkSuper.objects.create(**validated_data)
    for link_data in links_data:
        Link.objects.create(worksuper=worksuper, **link_data)
    return worksuper

Но ошибка как была, так и есть.

Вообще вот мой код:

Models.py:

class WorkSuper(models.Model):
    firstname = models.CharField("Имя", max_length=10, blank=True)
    lastname = models.CharField("Фамилия", max_length=30, blank=True)
class Link(models.Model):
    links = models.ForeignKey(WorkSuper, related_name='links', on_delete=models.CASCADE, blank=True)
    linkname = models.CharField("linkname", max_length=100, blank=True)
    linkurl = models.CharField("linkurl", max_length=100, blank=True)

Serializers.py:

class WorkSuperSerializer(serializers.ModelSerializer):
    links = LinkSerializer()

    class Meta:
        model = WorkSuper
        fields = ('firstname', 'lastname', 'links')
        # depth = 1

        def create(self, validated_data):
            links_data = validated_data.pop('links')
            worksuper = WorkSuper.objects.create(**validated_data)
            for link_data in links_data:
                Link.objects.create(worksuper=worksuper, **link_data)
            return worksuper
        # def to_representation(self, instance):
        #     data = super().to_representation(instance)
        #     data['links']['links'] = instance.inner.link
        #     # return super().to_representation(instance)
        #     return data

Views.py:

class WorkSuperView(viewsets.ModelViewSet):
   serializer_class = WorkSuperSerializer

   def get_queryset(self):
       queryset = WorkSuper.objects.all()
       return queryset

   def list(self, request, *args, **kwargs):
       queryset = self.get_queryset()
       serializer = self.serializer_class(queryset, many=True)
       data = serializer.data
       # return JsonResponse({'data': data})
       return Response(serializer.data)

Получается вот такой json при заполнении формы (скрин ниже), то есть links пустые:

Links is empty

Я надеюсь на помощь, потому что уже долго не могу разобраться.

Заранее спасибо Помогите пожалуйста

Я действительно очень очень долго уже не могу с этим справиться, перечитала уже просто все.


Ответы (0 шт):