change order api
This commit is contained in:
@@ -27,7 +27,8 @@ class OrderSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'order_number', 'status', 'total_price', 'user', 'items'
|
'id', 'order_number', 'total_price', 'user', 'payment_type', 'delivery_type',
|
||||||
|
'delivery_price', 'contact_number', 'address', 'comment', 'name', 'items'
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_user(self, obj):
|
def get_user(self, obj):
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# Generated by Django 5.2 on 2025-09-04 16:31
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('orders', '0004_order_status'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='address',
|
||||||
|
field=models.TextField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='comment',
|
||||||
|
field=models.CharField(blank=True, max_length=500, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='contact_number',
|
||||||
|
field=models.CharField(blank=True, max_length=15, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='delivery_price',
|
||||||
|
field=models.PositiveBigIntegerField(default=0),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='delivery_type',
|
||||||
|
field=models.CharField(choices=[('YandexGo', 'YandexGo'), ('DELIVERY_COURIES', 'kuryer orqali yetkazib berish'), ('PICKUP', 'olib ketish')], max_length=200, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(blank=True, max_length=200, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='payment_type',
|
||||||
|
field=models.CharField(choices=[('CASH', 'naqd'), ('CARD', 'card'), ('ACCOUNT_NUMBER', 'hisob raqam')], max_length=20, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
17
core/apps/orders/migrations/0006_remove_order_status.py
Normal file
17
core/apps/orders/migrations/0006_remove_order_status.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 5.2 on 2025-09-04 16:47
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('orders', '0005_order_address_order_comment_order_contact_number_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='order',
|
||||||
|
name='status',
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -6,18 +6,27 @@ from core.apps.products.models import Product
|
|||||||
|
|
||||||
|
|
||||||
class Order(BaseModel):
|
class Order(BaseModel):
|
||||||
STATUS = (
|
PAYMENT_TYPE = (
|
||||||
('PENDING', 'kutilmoqda'),
|
('CASH', 'naqd'),
|
||||||
('PROCESSING', 'qayta ishlash'),
|
('CARD', 'card'),
|
||||||
('SHIPPED', "jo'natilgan"),
|
('ACCOUNT_NUMBER', 'hisob raqam'),
|
||||||
('DELIVERED', 'yetkazib berildi'),
|
)
|
||||||
('CANCELLED', 'bekor qilingan')
|
DELIVERY_TYPE = (
|
||||||
|
('YandexGo', 'YandexGo'),
|
||||||
|
('DELIVERY_COURIES', 'kuryer orqali yetkazib berish'),
|
||||||
|
('PICKUP', 'olib ketish'),
|
||||||
)
|
)
|
||||||
|
|
||||||
total_price = models.PositiveBigIntegerField(default=0)
|
total_price = models.PositiveBigIntegerField(default=0)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')
|
||||||
order_number = models.PositiveBigIntegerField(default=1)
|
order_number = models.PositiveBigIntegerField(default=1)
|
||||||
status = models.CharField(max_length=20, choices=STATUS, default='kutilmoqda')
|
payment_type = models.CharField(max_length=20, choices=PAYMENT_TYPE, null=True)
|
||||||
|
delivery_type = models.CharField(max_length=200, choices=DELIVERY_TYPE, null=True)
|
||||||
|
delivery_price = models.PositiveBigIntegerField(default=0)
|
||||||
|
contact_number = models.CharField(max_length=15, null=True, blank=True)
|
||||||
|
address = models.TextField(null=True, blank=True)
|
||||||
|
comment = models.CharField(max_length=500, null=True, blank=True)
|
||||||
|
name = models.CharField(max_length=200, null=True, blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'{self.user} order'
|
return f'{self.user} order'
|
||||||
|
|||||||
@@ -22,15 +22,30 @@ class OrderItemCreateSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
class OrderCreateSerializer(serializers.Serializer):
|
class OrderCreateSerializer(serializers.Serializer):
|
||||||
items = OrderItemCreateSerializer(many=True)
|
items = OrderItemCreateSerializer(many=True)
|
||||||
|
payment_type = serializers.ChoiceField(choices=Order.PAYMENT_TYPE)
|
||||||
|
delivery_type = serializers.ChoiceField(choices=Order.DELIVERY_TYPE)
|
||||||
|
delivery_price = serializers.IntegerField(required=False)
|
||||||
|
contact_number = serializers.IntegerField()
|
||||||
|
address = serializers.CharField()
|
||||||
|
comment = serializers.CharField(required=False)
|
||||||
|
name = serializers.CharField(required=False)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
order_items = validated_data.pop('items')
|
order_items = validated_data.pop('items')
|
||||||
order = Order.objects.create(
|
order = Order.objects.create(
|
||||||
user=self.context.get('user'),
|
user=self.context.get('user'),
|
||||||
|
payment_type=validated_data.get('payment_type'),
|
||||||
|
delivery_type=validated_data.get('delivery_type'),
|
||||||
|
delivery_price=validated_data.get('delivery_price'),
|
||||||
|
contact_number=validated_data.get('contact_number'),
|
||||||
|
address=validated_data.get('address'),
|
||||||
|
comment=validated_data.get('comment'),
|
||||||
|
name=validated_data.get('name')
|
||||||
)
|
)
|
||||||
items = []
|
items = []
|
||||||
total_price = 0
|
total_price = 0
|
||||||
|
total_price += validated_data.get('delivery_price')
|
||||||
for item in order_items:
|
for item in order_items:
|
||||||
items.append(OrderItem(
|
items.append(OrderItem(
|
||||||
product=item.get('product'),
|
product=item.get('product'),
|
||||||
@@ -61,5 +76,6 @@ class OrderListSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'order_number', 'total_price', 'items', 'created_at'
|
'id', 'order_number', 'total_price', 'payment_type', 'delivery_type', 'delivery_price',
|
||||||
|
'contact_number', 'address', 'comment', 'name', 'items', 'created_at'
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user