55 lines
2.1 KiB
Python
55 lines
2.1 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__"
|
|
|
|
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']
|