How to update the value of a column in a foreign table in django

I have 2 tables, one of the tables is a foreign table to the other (foreign key). I want to decrease the value of the quantity column of items in the foreign table based on value of the quantity column of the parent table. Below is my code

model.py

from django.db import models

# Create your models here.

PAYMENT_METHOD = (
    ('CASH', 'cash'),
    ('TRANSFER', 'transfer'),
)

class ItemSold(models.Model):
    item_name = models.CharField(max_length=80)
    quantity = models.IntegerField()

    def __str__(self):
        return self.item_name


class DailySales(models.Model):
    customername = models.CharField(max_length=100)
    itemsold = models.ForeignKey(ItemSold, related_name="soldItem", on_delete=models.CASCADE)
    quantity = models.IntegerField()
    rate = models.IntegerField()
    totalprice = models.IntegerField(default=0)
    datesold = models.DateTimeField(auto_now_add=True, auto_now=False)
    paymentmethod = models.CharField(max_length=40, choices=PAYMENT_METHOD, default=PAYMENT_METHOD[0][0])
    havepaid = models.BooleanField(default=False)
    datepaid = models.DateTimeField(auto_now_add=False, auto_now=True)

    class Meta:
        verbose_name_plural = 'Daily Sales'

    def __str__(self):
        return self.customername

    def save(self, *args, **kwargs):
        self.totalprice = self.rate * self.quantity
        super(DailySales, self).save(*args, **kwargs)

views.py

class DailySalesListView(generics.GenericAPIView):
    serializer_class = DailySalesSerializer
    queryset = DailySales.objects.all()
    name = 'Daily Sales List'
    filter_backends = (DjangoFilterBackend,)

    filterset_fields = ('customername','havepaid', 'datesold', 'itemsold', 'datepaid')

    def get(self, request):
        sales = self.filter_queryset(self.get_queryset())
        serializer = self.serializer_class(instance=sales, many=True)
        return Response(data=serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        data = request.data
        serializer = self.serializer_class(data=data)

        if serializer.is_valid():
            serializer.save()
            return Response(data=serializer.data, status=status.HTTP_201_CREATED)

        return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST)

I haven't tried anything yet, I don't know how to go about it

If I understood you correctly, the two model fields quantity are identical, in that case, you don't need them both. You can do that logic in your view with the help of get_query_context.

Back to Top