code example
unknown
python
4 years ago
4.3 kB
10
Indexable
### Order Detail Serializer Example
class OrderGetSerializer(serializers.ModelSerializer):
customer = OrderCustomerSerializer()
products = serializers.SerializerMethodField(method_name="get_order_items")
coupon = serializers.SlugRelatedField(
queryset=Coupon.objects.all(), required=False, write_only=True, slug_field="id"
)
shipping_information = serializers.SerializerMethodField(
method_name="get_shipping_information", allow_null=True
)
transactions = serializers.SerializerMethodField(method_name="get_transactions")
shipping_address = serializers.SerializerMethodField(
method_name="get_shipping_address"
)
billing_address = serializers.SerializerMethodField(
method_name="get_billing_address"
)
order_history = serializers.SerializerMethodField(method_name="get_order_history")
class Meta:
model = Order
fields = [
"id",
"order_id",
"customer",
"products",
"total_amount",
"paid_status",
"is_fulfilled",
"is_shipped",
"description",
"applied_coupon",
"shipping_address",
"billing_address",
"coupon",
"created_at",
"shipping_information",
"transactions",
"order_history",
]
def get_total_minus_shipping(self, obj):
total_amount = float(obj.total_amount)
if ShippingOrder.objects.filter(order=obj, shipmentCost__isnull=False).exists():
shipment_cost = float(obj.shippingorder.shipmentCost)
order_total = total_amount - shipment_cost
return round(order_total, 2)
else:
return round(total_amount, 2)
def get_shipping_information(self, obj):
if ShippingOrder.objects.filter(order=obj).exists():
shipping_information = obj.shippingorder
serializer = ShippingOrderSerializer(shipping_information)
return serializer.data
return None
def get_order_items(self, obj):
if obj.linked_with is not None:
items = obj.linked_with.modifiedproductscampaign_set.all()
serializer = GetProductItemsSerializer(items, many=True)
else:
items = obj.items
serializer = GetOrderItemSerializer(items, many=True)
return serializer.data
def get_order_history(self, obj):
items = obj.orderhistory_set.all()
serializer = OrderHistorySerializer(items, many=True)
return serializer.data
def get_transactions(self, obj):
transactions = obj.transaction_set.all()
serializer = TransactionSerializer(transactions, many=True)
return serializer.data
def get_shipping_address(self, obj):
shipping_address = obj.shipping_address
serializer = CustomerAddressSerializer(shipping_address)
return serializer.data
def get_billing_address(self, obj):
billing_address = obj.billing_address
serializer = CustomerAddressSerializer(billing_address)
return serializer.data
### Orders View Example
class GetOrdersByShopView(generics.ListAPIView):
permission_classes = (
IsAuthenticated,
IsStaffGroups,
)
serializer_class = ShopOrdersSerializer
queryset = Order.objects.all()
parser_classes = [JSONParser, FormParser, MultiPartParser]
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
search_fields = ["order_id", "customer__first_name"]
@method_decorator(
name="get",
decorator=swagger_auto_schema(
operation_id="Get orders by shop id"))
def get(self, request, shop_id, format=None):
user = get_current_user(request)
shop = shop_verification(shop_id)
staff_check(shop, user)
paginator = TotalPagesPagination()
orders = (
Order.objects.select_related("customer").filter(deleted=False, shop=shop).order_by("-created_at")
)
filter_backends = self.filter_queryset(orders)
paginated_data = paginator.paginate_queryset(filter_backends, request)
serializer = ShopOrdersSerializer(paginated_data, many=True)
return paginator.get_paginated_response(serializer.data)
Editor is loading...