Уменьшение запасов в базе данных с помощью 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

Вернуться на верх