Как редактировать api и добавлять изменения в django

Я отправляю api следующим образом:

[
    {
        "id": 1,
        "name": "Burger",
        "name_ru": "Burger",
        "name_en": "Burger",
        "img": null,
        "parent_category": 1
    },
    {
        "id": 3,
        "name": "Pizza",
        "name_ru": "Pizza",
        "name_en": "Pizza",
        "img": null,
        "parent_category": 1
    }
]

Как можно отредактировать этот api? Я хочу отправлять parent_category с id и name, а не только id.
Мой views.py:

class TestList(APIView):
  def get(self, request, pk, format=None):
    cc = Child_Category.objects.filter(parent_category_id = pk)
    serializer = ChildCategorySerializer(cc, many=True)
    return Response(serializer.data)

Мой models.py:

class Parent_Category(models.Model):
  name = models.CharField(max_length=255)
  name_ru = models.CharField(max_length=255)
  name_en = models.CharField(max_length=255)
  img = models.ImageField(blank=True, null=True)

  def __str__(self):
      return self.name_en
  
  class Meta:
    verbose_name_plural = 'Parent Categories'

class Child_Category(models.Model):
  name = models.CharField(max_length=255)
  name_ru = models.CharField(max_length=255)
  name_en = models.CharField(max_length=255)
  parent_category = models.ForeignKey(Parent_Category, on_delete=models.CASCADE)
  img = models.ImageField(blank=True, null=True)

  def __str__(self):
      return self.name_en
  
  class Meta:
    verbose_name_plural = 'Child Categories'

вы должны использовать два сериализатора

class TestList(APIView):
  def get(self, request, pk, format=None):
    parent_category = ParentCategory.objects.get(id=pk)
    child_categories = Child_Category.objects.filter(parent_category_id = pk)
    parent_serializer = ParentCategorySerializer(parent_category)
    child_serializer = ChildCategorySerializer(child_categories, many=True)
    data = {
        "parent_category": parent_serializer.data,
        "child_categories": child_serializer.data
    }
    return Response(data)

если вы хотите добавить родительскую_категорию, дочерние_категории в одни данные

[
    {
        "id": 1,
        "name": "Burger",
        "name_ru": "Burger",
        "name_en": "Burger",
        "img": null,
        "parent_category": 1,
        "parent_name":xyz
    },
    {
        "id": 3,
        "name": "Pizza",
        "name_ru": "Pizza",
        "name_en": "Pizza",
        "img": null,
        "parent_category": 1,
        "parent_name":xyz
    }
]

поэтому вы можете сделать вот так

class TestList(APIView):
  def get(self, request, pk, format=None):
    parent_category = ParentCategory.objects.get(id=pk)
    parent_name = parent_category.name
    child_categories = Child_Category.objects.filter(parent_category_id = pk)
    result_data=[]
    for data in child_categories:
        dict_data = {
        "id": data.id,
        "name": data.name,
        "name_ru": data.name_ru,
        "name_en": data.name_en,
        "img": data.img,
        "parent_category" : data.parent_category,
        "parent_name":parent_name
        }
        result_data.append(dict_data)
    return Response(result_data)

А если вы хотите использовать сериализатор, то вам нужно создать новый сериализатор с дочерним и родительским именем.

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