Files
hossein-por-shop/backend/product/serializers.py
T
2025-02-01 18:42:26 +03:30

69 lines
2.6 KiB
Python

from .models import *
from rest_framework import serializers
from django.utils import timezone
from datetime import timedelta
class ProductChatSerializer(serializers.ModelSerializer):
price = serializers.SerializerMethodField()
is_new = serializers.SerializerMethodField()
class Meta:
model = ProductModel
fields = ['name', 'description', 'price', 'in_stock', 'discount', 'is_new']
def get_price(self, obj):
dollor_price = self.context.get('dollor_price')
dollar_to_dirham = 0.27
if dollor_price is None:
raise ValidationError({"dollor_price": "The 'dollor_price' must be provided in the context for dollar pricing."})
if obj.currency == 'toman':
toman_price = obj.price
elif obj.currency == 'dollor':
toman_price = obj.price * dollor_price
elif obj.currency == 'derham':
toman_price = obj.price * dollor_price * dollar_to_dirham
return "{:,.0f} تومان".format(toman_price)
def get_is_new(self, obj):
return timezone.now() < obj.created_at + timedelta(days=7)
class ProductSerializer(ProductChatSerializer):
class Meta:
model = ProductModel
fields = "__all__"
# many_fields = ['name', 'price']
# one_fields = ['description',]
# def __init__(self, *args, **kwargs):
# many = kwargs.pop('many', True)
# super().__init__(*args, **kwargs)
# allowed_fields = self.Meta.many_fields if many else self.Meta.one_fields
# allowed = set(allowed_fields)
# existing = set(self.fields.keys())
# for field_name in existing - allowed:
# self.fields.pop(field_name)
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = CommentModel
fields = "__all__"
read_only_fields = ('show', 'product', 'user')
class SubCategorySerializer(serializers.ModelSerializer):
product_count = serializers.SerializerMethodField()
parent = serializers.SerializerMethodField()
class Meta:
model = SubCategoryModel
fields = ['id', 'name', 'slug','icon', 'meta_title', 'meta_description', 'product_count', 'show', 'parent', 'image']
def get_product_count(self, obj):
return obj.products.count()
def get_parent(self, obj):
return obj.parent.name
class MainCategorySerializer(serializers.ModelSerializer):
subcategorys = SubCategorySerializer(many=True)
class Meta:
model = MainCategoryModel
fields = ['id', 'name', 'slug', 'icon', 'meta_title', 'meta_description', 'subcategorys']