new fields for order model and update cart serialzier

This commit is contained in:
Parsa Nazer
2025-03-11 22:35:49 +03:30
parent 91d00fadb7
commit 234e27e90e
3 changed files with 45 additions and 9 deletions
@@ -0,0 +1,18 @@
# Generated by Django 5.1.2 on 2025-03-11 18:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('order', '0012_rename_name_discountcode_code'),
]
operations = [
migrations.AddField(
model_name='ordermodel',
name='cart_total',
field=models.BigIntegerField(blank=True, null=True, verbose_name='کل سبد خرید'),
),
]
+13 -5
View File
@@ -50,6 +50,12 @@ class OrderModel(models.Model):
is_paid = models.BooleanField(default=False, verbose_name="وضعیت پرداخت")
discount_code = models.ForeignKey(DiscountCode, on_delete=models.PROTECT, null=True, blank=True, verbose_name="کدتخفیف")
status = models.CharField(max_length=20, choices=STATUS_CHOICES, verbose_name="وضعیت سفارش")
discount = models.BigIntegerField(null=True, blank=True, verbose_name='کل تخقیف')
tax = models.BigIntegerField(null=True, blank=True, verbose_name='مالیات')
final_price = models.BigIntegerField(null=True, blank=True, verbose_name='قیمت نهایی')
cart_total = models.BigIntegerField(null=True, blank=True, verbose_name='کل سبد خرید')
def __str__(self):
return f'سفارش: {self.id}'
@@ -58,9 +64,6 @@ class OrderModel(models.Model):
verbose_name_plural = 'سفارشات'
# def total_without_tax(self):
# return sum(item.total() for item in self.items.all())
def save(self, *args, **kwargs):
try:
@@ -76,7 +79,7 @@ class OrderModel(models.Model):
def discount_list(self):
items_with_discount = self.items.filter(product__discount__gt=0)
discount_amount_dict = {f'{item.product}': item.product.discount for item in items_with_discount}
discount_amount_dict = [{'product_name': f'{item.product}', 'discount': f'{item.product.discount}', 'discount_amount': ''} for item in items_with_discount]
if self.discount_code:
@@ -90,9 +93,11 @@ class OrderModel(models.Model):
def discount(self):
# total_with_item_discount = sum(item.total_with_discount() for item in self.items.all())
# return total_with_item_discount * ((100 - discount_percent) / 100)
# discount_percent = self.discount_code.percent
# return total_with_item_discount * ((100 - discount_percent) / 100)
pass
def tax(self):
return self.total_without_tax() * 0.2
@@ -101,9 +106,12 @@ class OrderModel(models.Model):
pass
# return self.total_with_discount() + self.tax()
def final_price(self):
pass
def submit_cart(self):
pass
+14 -4
View File
@@ -20,20 +20,27 @@ class OrderItemSerailzier(serializers.ModelSerializer):
class CartSerializer(serializers.ModelSerializer):
items = OrderItemSerailzier(many=True)
discount = serializers.SerializerMethodField()
product_discount = serializers.SerializerMethodField()
cart_total = serializers.SerializerMethodField()
tax = serializers.SerializerMethodField()
final_price = serializers.SerializerMethodField()
discount_code = serializers.SerializerMethodField()
class Meta:
model = OrderModel
fields = [ 'discount_code', 'items', 'cart_total', 'discount', 'tax', 'final_price']
fields = [ 'discount_code', 'items', 'cart_total', 'product_discount', 'tax', 'final_price']
def get_discount_code(self, obj):
return obj.discount_code.code if obj.discount_code else None
if obj.discount_code:
return {
'code': obj.discount_code.code,
'persent': obj.discount_code.percent,
'amount': '100,000 تومان'
}
else:
return None
def get_discount(self, obj):
def get_product_discount(self, obj):
return [
{
'product_name': 'iphone 13',
@@ -47,6 +54,9 @@ class CartSerializer(serializers.ModelSerializer):
},
]
def get_tax(self, obj):
return 1000