mRezaAnanta
mRezaAnanta

Reputation: 25

Django How To Add Number From Other Object

How can i add an int value inside of a field in multiple object to be displayed in another object. Lets say that i need to add all of the item that the customer have ordered previously and store them inside of all_previous_orders.

For example if customer no 1 making an order for 10 fruits and then later making another order for 1 car then the field inside of customer object named "all_previous_orders" will add all of the number of item inside of order object (10 fruits + 1 car = 11 item).

Result.json

[
    {
        "customer_name": "John Doe",
        "order": [
            {
                "order_name": "fruit",
                "how_many_order": 10,
            },
            {
                "order_name": "car",
                "how_many_order": 1,
            },
        ],
        "all_previous_orders": 11
    },
]

Models.py

class Customer(models.Model):
    customer_name = models.CharField(max_length=100)

class Order(models.Model):
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
    order_name = models.CharField(max_length=100)
    how_many_order = models.IntegerField(default=0)

Serializers.py

class OrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

class CustomerSerializer(serializers.ModelSerializer):
    orders = OrderSerializer(many=True, read_only=True, required=False)

    class Meta:
        model = Customer
        fields = '__all__'

Upvotes: 0

Views: 84

Answers (1)

haduki
haduki

Reputation: 938

You'd have to change your CustomerSerializer a bit to add a count for the past orders:

class CustomerSerializer(serializers.ModelSerializer):
    all_previous_orders= serializers.SerializerMethodField()
    orders = OrderSerializer(many=True, read_only=True, required=False)
    
    class Meta:
        model = Customer
        fields = ('customer_name', 'orders', 'all_previous_orders')
    
    def get_all_previous_orders(self, customer):
        count = Order.objects.filter(customer=customer).count()
        return count 

Upvotes: 0

Related Questions