Django REST Framework POST вложенные данные с самореференциальной моделью - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь создать REST API для вложенных данных POST для самореференциальной модели.Поэтому я создал эти сериализаторы

class RecursiveField(serializers.Serializer):
    def to_representation(self, value):
        serializer = self.parent.parent.__class__(value, context=self.context)
        return serializer.data

class CategorySerializer(serializers.ModelSerializer):
    children = RecursiveField(many=True)

    class Meta:
        model = Category
        fields = ('id', 'name', 'children')
        depth=10



    def create(self, validated_data):
        def create_children(children, parent):
            for child in children:
                if 'children' in child.keys():
                    categories = child.pop('children')
                else:
                    categories = []
                category = Category.objects.create(parent=parent, **child)
                if categories:
                    create_children(categories, category)
        if 'children' in validated_data.keys():
            categories = validated_data.pop('children')
        else:
            categories = []
        category = Category.objects.create(**validated_data)
        if categories:
            create_children(categories, category)
        return category

Но когда я пытаюсь POST-данные типа

    {
"name": "Category A" ,
"children": [
{
"name": "Category A.A" ,
"children": [
{
"name": "Category A.A.A" ,
"children": [
{
"name": "Category A.A.A.A"
},
{
"name": "Category A.A.A.B"
}
]
}
]
}

, у меня возникает проблема:

IntegrityError в / Categories /Не удалось выполнить УНИКАЛЬНОЕ ограничение: quickstart_category.name

И получение данных из базы данных может иметь:

{
    "count": 2,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 1,
            "name": "Category A",
            "children": [
                {
                    "id": 2,
                    "name": "",
                    "children": []
                }
            ]
        },
        {
            "id": 2,
            "name": "",
            "children": []
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...