Это проблема django ORM и сериализаторов drf

Структура данных, которая мне нужна, выглядит следующим образом。

demo: "имя": "имя группы", "key": "grouping1", "base_templates": [ { "identity": "123456", "name": "createxxx",

            },{
                "identity": "112233",
                "name": "deletexxx",
                
            }
        ]
    },
    {
        "name": "groupname2",
        "key": "grouping2",
        "base_templates": [
            {
                "identity": "123999999",
                "name": "runxxxx",
                "descr": "....."
            }
        ]
    }
model:

class TicketCategory(Model.models):

    name = models.CharField(verbose_name="name", max_length=100, unique=True)
    key = models.CharField(verbose_name="key", max_length=100, unique=True)


class BaseTemplate(Model.models):
    identity = models.UUIDField(verbose_name="tag", default=uuid.uuid4, editable=False)
    category = models.ForeignKey(
        TicketCategory, verbose_name="grouping", on_delete=models.CASCADE
    )
    name = models.CharField(
        verbose_name="name", max_length=100, default="", db_index=True
    )

serializers

class BaseTemplateSerializer(serializers.ModelSerializer):
    class Meta:
        model = BaseTemplate
        fields = "__all__"


class TicketCategoryDashboardSerializer(serializers.ModelSerializer):
    basetmplate = BaseTemplateSerializer()

    class Meta:
        model = TicketCategory
        fields = "__all__"

class TicketCategoryDashboard(APIView):

def get(self, request: Request):
    r = TicketCategory.objects.all().last()
    serializer = TicketCategoryDashboardSerializer(r)
    return Response(serializer.data, status=200)

Как сгенерировать структуру данных по образцу через обратный запрос?

Я бы предложил добавить related_name="base_templates" к вашему category = models.ForeignKey(...), и тогда вы сможете определить ваш сериализатор как:

class TicketCategoryDashboardSerializer(serializers.ModelSerializer):
    base_templates = BaseTemplateSerializer(many=True)

    class Meta:
        model = TicketCategory
        fields = "__all__"

В документации Django также есть примеры.

Вернуться на верх