103 lines
2.2 KiB
Python
103 lines
2.2 KiB
Python
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",
|
|
)
|