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.