У меня есть модель с именем Item
class Item(models.Model):
item_name = models.CharField(max_length=200)
item_price = models.DecimalField(max_digits=100, decimal_places=2)
item_description = models.CharField(max_length=300)
item_bought_price = models.DecimalField(max_digits=100, decimal_places=2)
stock_level = models.IntegerField()
restock_level = models.IntegerField()
created_at = models.DateTimeField(auto_now_add=True)
У меня также есть форма для администратора сайта, чтобы добавить новый объект элемента с сайта без перехода к / admin url
forms.py
class ItemForm(forms.Form):
item_name = forms.CharField(label='Item name', max_length=200)
item_price = forms.IntegerField(label='Price')
item_description = forms.CharField(label='Item Description', max_length=500)
item_bought_price = forms.IntegerField(label='Item bought price')
stock_level = forms.IntegerField(label='Stock Level')
restock_level = forms.IntegerField(label='Restock Level')
def clean(self):
cleaned_data = super().clean()
item_name = cleaned_data.get('item_name')
item_price = cleaned_data.get('item_price')
item_description = cleaned_data.get('item_description')
item_bought_price = cleaned_data.get('item_bought_price')
stock_level = cleaned_data.get('stock_level')
restock_level = cleaned_data.get('restock_level')
views.py
def add_item(request):
if request.user.is_superuser:
if request.method == "POST":
form = ItemForm(request.POST)
if form.is_valid():
item_name = form.cleaned_data['item_name']
item_price = form.cleaned_data['item_price']
item_description = form.cleaned_data['item_description']
item_bought_price = form.cleaned_data['item_bought_price']
stock_level = form.cleaned_data['stock_level']
restock_level = form.cleaned_data['restock_level']
item = Item.objects.create(
item_name=item_name,
item_price=item_price,
item_description=item_description,
item_bought_price=item_bought_price,
stock_level=stock_level,
restock_level=restock_level,
)
item.save()
return redirect('items:item_list')
else:
messages.error(request, 'Invalid form.')
return redirect('site_admin:add_item')
else:
form = ItemForm()
return render(request, 'Admin/add_item.html', {'form':form,})
else:
return HttpResponse('Whoopsie!')
У меня есть еще одна функция, где при заказе товара количество купленных предметов вычитается из stock_level, отлично работает с экземплярами предметов, созданными через / admin, но с экземплярами элементов, созданными с помощью формы, когда я пытаюсь выполнить арифметическую операцию над item.stock_level, я получаю ошибку DeferredAttribute, что вызывает это?