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": []
}
Что я делаю не так? Пожалуйста, спрашивайте, если требуется дополнительная информация.