69 lines
2.6 KiB
Python
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']
|