Как вернуть родительские продукты, RecursiveField в остальные API? - PullRequest
0 голосов
/ 03 марта 2019

У меня нет возврата родителя в продуктах rest api django.когда я запрашиваю подкатегории в url, показать родительскую рекурсию, но когда я запрашиваю продукты в url, родительское поле пусто.Пожалуйста, помогите мне, спасибо.

serializers.py: я использовал RecursiveField.

from rest_framework import serializers
from products.models import Product, SubCategory
from rest_framework_recursive.fields import RecursiveField


class SubCategorySerializer(serializers.ModelSerializer):

      parent                      = serializers.ListField(read_only=True, source='get_children', child=RecursiveField())


      class Meta:
           model = SubCategory
            fields = ('id', 'name', 'parent',)


class ProductSerializer(serializers.ModelSerializer):

      subcategory = SubCategorySerializer(read_only=True)


      class Meta:
          model = Product
          fields = ('id', 'name', 'subcategory',)

файл models.py

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey


class SubCategory(MPTTModel):

       name = models.CharField(max_length=50, unique=True)
       parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')


       class MPTTMeta:
             level_attr = 'mptt_level'
             order_insertion_by = ['name']


       def __str__(self):
             return self.name


class Product(models.Model):

      name                  = models.CharField(max_length=128)
       subcategory           = models.ForeignKey(SubCategory, on_delete=models.CASCADE, null=True, blank=True, default=None)

    def __str__(self):
          return self.name

urls.py

 from products.views import (ProductViewSet,
                        SubCategoryViewSet)

 from rest_framework.routers import DefaultRouter


 router = DefaultRouter()
 router.register(r'products', ProductViewSet, basename='product')
 router.register(r'sub-categories', SubCategoryViewSet, basename='subcategory')

views.py

from products.models import Product, SubCategory
from products.serializers import ProductSerializer, SubCategorySerializer
from rest_framework import mixins, generics



   # Create your views here.
    class ProductViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):

           serializer_class = ProductSerializer
           queryset = Product.objects.all()


   class SubCategoryViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):

           serializer_class = SubCategorySerializer
           queryset = SubCategory.objects.all()

http://127.0.0.1:8000/sub-categories/ ==> показать родителя: введите описание изображения здесь

http://127.0.0.1:8000/products/ ==> не показывает родителя введите описание изображения здесь

...