Форма для удаления определенных атрибутов в 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)