Уменьшение запасов в базе данных с помощью django
Я создал запас кофейных зерен в базе данных и хочу уменьшать запас каждый раз, когда создаются CoffePods, указывая на уменьшение запаса зерен.
Как уменьшить запас CoffeBeans в базе данных каждый раз, когда я создаю CoffePods, получаемый в качестве параметра запроса из URL, и какова наилучшая практика в этом случае?
views.py
class PodsViewSet(viewsets.ModelViewSet):
queryset = CoffePods.objects.all().order_by('id')
serializer_class = CoffePodsSerializer
serializer_class = CoffeBeansSerializer
filter_backends = [django_filters.rest_framework.DjangoFilterBackend]
filterset_fields = '__all__'
def create(self, request, *args, **kwargs):
print("Coffe Pod Created!")
try:
pods_pack_size = int(self.request.query_params.get('pack_size'))
coffe_beans = CoffeBeans.objects.all()[0]
if coffe_beans.capacity > 2.0 and coffe_beans.quantity > 4:
if pods_pack_size == 1:
coffe_beans.capacity -= 0.5
coffe_beans.quantity -= 1
coffe_beans.save()
elif pods_pack_size == 2:
coffe_beans.capacity -= 1.0
coffe_beans.quantity -= 2
coffe_beans.save()
elif pods_pack_size == 3:
coffe_beans.capacity -= 1.5
coffe_beans.quantity -= 3
coffe_beans.save()
elif pods_pack_size == 4:
coffe_beans.capacity -= 2.0
coffe_beans.quantity -= 4
coffe_beans.save()
except Exception as e:
raise e
return Response(coffe_beans)
models.py
class CoffeBeans(models.Model):
capacity = models.FloatField(validators=[MinValueValidator(0.0)], default=100)
quantity = models.PositiveIntegerField(default=200)
class Meta:
verbose_name_plural = 'Coffe Beans'
def __str__(self):
return f"{self.capacity} KG - {self.quantity} Pack"
Вы можете написать метод модели, чтобы сделать это
class CoffeBeans(models.Model):
capacity = models.FloatField(validators=[MinValueValidator(0.0)], default=100)
quantity = models.PositiveIntegerField(default=200)
class Meta:
verbose_name_plural = 'Coffe Beans'
def __str__(self):
return f"{self.capacity} KG - {self.quantity} Pack"
def reduce_coffebean(self, pods_pack_size):
self.capacity -= pods_pack_size/2
self.quantity -= pods_pack_size
self.save()
Затем вы можете просто вызвать coffebeans.reduce_coffebean(pods_pack_size)
в вашем views.py