Форма для удаления определенных атрибутов в Django

Простите за глупый вопрос, но я пытаюсь сделать простой сайт по управлению запасами на Django и не могу заставить эту часть работать. Я не могу получить часть, где я регистрирую определенное количество ящиков соды, а затем, когда ее забирают со склада, я хочу, чтобы веб-приложение зарегистрировало ее, но на меньшее количество.

Моя модель выглядит следующим образом:

class Drink(models.Model):
    category = models.CharField(max_length=100)
    name = models.CharField(max_length=200, unique=True)
    crate = models.IntegerField()

Итак, если менеджер запасов регистрирует 25 ящиков (crate) определенного напитка (название), а затем через некоторое время вынимает 20 из них для использования, я хочу, чтобы он мог зарегистрировать, что 20 ящиков были выняты и что теперь осталось 5. Я хочу сделать это на front-end. Я использовал эту форму для регистрации объекта Drink:

class CrateForm(forms.ModelForm):
  class Meta:
    model = Drink
    fields = ["name", "category", "crate",]
    labels = {'name': "Name", "crate": "Crate",}

Итак, я думаю, мой вопрос заключается в следующем: как мне создать форму, которая позволяет мне вычесть любое количество ящиков, которое я хочу взять для использования, а затем зарегистрировать оставшееся количество обратно. Это что-то вроде CRUD, когда она позволяет мне обновить конкретное поле ящика. PS: он также должен выдавать ошибку, когда я пытаюсь вычесть 60 ящиков, когда у меня только 20 ящиков на складе.

Как я уже сказал, я только начинаю изучать Django и застрял здесь навсегда. Есть идеи?

Один из многих способов: использовать обычную форму.

class SoldCrateForm( forms.Form):
    quantity_sold = forms.IntegerField( ...)

в методе FormView, выполняйте работу в методе form_valid. Вторичный вопрос заключается в том, как узнать, над каким Drink вы работаете. Вы можете выбрать его в той же форме, или, если он уже известен, вы можете передать его в URL. Я предположу последнее, что он был разобран в определении URL как drink:

def form_valid(self, form):
    drink = Drink.objects.get( pk = self.kwargs['drink'] )
    stock = drink.crate
    sold = form.cleaned_data['quantity_sold']
    if sold > stock:
         form.add_error('quantity_sold',
             f'There are only {stock} crates in stock')
         return self.form_invalid( self, form)
    drink.crate =  drink.crate - sold
    drink.save()
    return super().form_valid( self, form)
Вернуться на верх