from rest_framework import serializers from rest_framework.serializers import ModelSerializer from market.models import ( Brand, Product, Post, Image, ) class ProductSerializer(ModelSerializer): class Meta: model = Product fields = ("id", "name", "brand") depth = 1 class ProductListSerializer(ModelSerializer): class Meta: model = Product fields = ("id", "name") class BrandSerializer(ModelSerializer): products = ProductListSerializer(many=True, read_only=True) class Meta: model = Brand fields = ["id", "name", "products"] class BrandListSerializer(ModelSerializer): class Meta: model = Brand fields = "__all__" class ImageSerializer(ModelSerializer): class Meta: model = Image fields = ("image",) class PostListSerializer(ModelSerializer): product = ProductListSerializer(read_only=True) nickname = serializers.CharField(source="author.nickname") image = serializers.SerializerMethodField() class Meta: model = Post fields = ( "id", "product", "price", "text", "nickname", "status", "written_at", "image", ) def get_image(self, obj): first_image = obj.images.first() return ImageSerializer( instance=first_image, context=self.context ).data["image"] class PostCreateSerializer(ModelSerializer): class Meta: model = Post fields = ( "product", "price", "text", ) class PostStatusUpdateSerializer(ModelSerializer): class Meta: model = Post fields = ("status",) class PostSerializer(ModelSerializer): product = ProductListSerializer(read_only=True) nickname = serializers.CharField(source="author.nickname") images = ImageSerializer(many=True, read_only=True) class Meta: model = Post fields = ( "id", "product", "price", "text", "nickname", "status", "written_at", "images", )