code example
unknown
python
4 years ago
4.3 kB
6
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...