Это проблема 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__"