Django: объект модели, созданный с формой, возвращающей DeferredAttribute на Object.stock_level - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть модель с именем 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, что вызывает это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...