Django Rest Framework Вложенное представление не отображается

Мой models.py:

Мой serializers.py:


    class BrandSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Brand
            fields = ['name', ]
    
    
    class ProductOrServiceSerializer(serializers.HyperlinkedModelSerializer):
        detail = serializers.HyperlinkedIdentityField(
            view_name='drf:productsandservices-detail', lookup_field='slug')
    
        class Meta:
            model = ProductOrService
            fields = ['name', 'detail', 'web_id', 'slug',
                      'is_visible', 'is_blocked', 'is_product', ]
            read_only = True
            editable = False
            depth = 0
    
    
    class ProductSerializer(serializers.ModelSerializer):
        brand = BrandSerializer(many=False, read_only=True)
    
        class Meta:
            model = Product
            fields = ['brand', 'show_price', 'available_units', 'sold_units',]
            read_only = True
    
    
    class ServiceSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Service
            fields = '__all__'
    
    
    class ProductOrServiceDetailSerializer(serializers.ModelSerializer):
        def get_additional_detail():
            if ProductOrService.is_product:
                return ProductSerializer(many=False, read_only=True)
            else:
                return ServiceSerializer(many=False, read_only=True)
        additional_detail = get_additional_detail()
    
        class Meta:
            model = ProductOrService
            # exclude = ['id',]
            fields = ['web_id', 'slug', 'name', 'description', 'is_visible', 'is_blocked', 'created_at', 'updated_at', 'is_product', 'seller', 'category', 'users_wishlist', 'reported_by', 'additional_detail',]
            read_only = True
            editable = False

Мой views.py:


    class ProductsOrServicesList(viewsets.GenericViewSet, mixins.ListModelMixin):
        queryset = ProductOrService.objects.all()
        serializer_class = ProductOrServiceSerializer
        serializer_action_classes = {'retrieve': ProductOrServiceDetailSerializer, }
        permission_classes = [permissions.IsAuthenticatedOrReadOnly]
        lookup_field = 'slug'
    
        def get_serializer(self, *args, **kwargs):
            try:
                serializer_class = self.serializer_action_classes[self.action]
                kwargs['context'] = self.get_serializer_context()
                return serializer_class(*args, **kwargs)
            except:
                return super().get_serializer(*args, **kwargs)
    
        def retrieve(self, request, slug=None):
            item = self.get_object()
            serializer = self.get_serializer(item)
            return Response(serializer.data)
    
    
    class ProductList(viewsets.GenericViewSet, mixins.ListModelMixin):
        queryset = Product.objects.all()
        serializer_class = ProductSerializer
        permission_classes = [AllowAny]

Проблема в том, что в представлении ProductList я вижу brand вложенные следующим образом:


    HTTP 200 OK
    Allow: GET, HEAD, OPTIONS
    Content-Type: application/json
    Vary: Accept
    
    {
        "count": 4,
        "next": null,
        "previous": null,
        "results": [
            {
                "brand": {
                    "name": "Samsung"
                },
                "show_price": "25000.00",
                "available_units": 1,
                "sold_units": 0
            },
            {
                "brand": {
                    "name": "Adidas"
                },
                "show_price": "1500.00",
                "available_units": 2,
                "sold_units": 0
            },
            {
                "brand": {
                    "name": "Lenovo"
                },
                "show_price": "12000.00",
                "available_units": 1,
                "sold_units": 0
            },
            {
                "brand": {
                    "name": "Nike"
                },
                "show_price": "2500.00",
                "available_units": 2,
                "sold_units": 0
            }
        ]
    }

Но в представлении ProductsOrServicesDetail я не вижу вложенных additional_detail, как показано ниже:


    HTTP 200 OK
    Allow: GET, HEAD, OPTIONS
    Content-Type: application/json
    Vary: Accept
    
    {
        "web_id": "1111",
        "slug": "samsung-galaxay-j5-1111",
        "name": "Samsung Galaxy J5",
        "description": "A retail salesperson assists customers in making purchases, including processing payments. This type of position exists in a wide variety of businesses that sell merchandise directly to customers, such as furniture, clothing, cars and equipment. Creating a strong job description is essential to defining the responsibilities of this role within your organization and determining the requirements for a candidate.",
        "is_visible": true,
        "is_blocked": false,
        "created_at": "2022-06-24T19:52:36.869036+05:45",
        "updated_at": "2022-06-24T19:52:36.869048+05:45",
        "is_product": true,
        "seller": 1,
        "category": [
            1,
            2
        ],
        "users_wishlist": [],
        "reported_by": []
    }

Что я делаю не так? Пожалуйста, спрашивайте, если требуется дополнительная информация.

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