Im используя встроенный набор форм для системы заказа. Пользователь выбирает элемент, а затем вводит количество требуемого элемента.Использование проверки формы django для проверки товарной позиции
Формат использует эту модельную форму. Я пытаюсь использовать чистый метод, чтобы проверить, осталось ли инвентарь для выбранного элемента. Ошибка я получаю объект 'OrderedItemForm' не имеет атрибута 'элемент'
class OrderedItemForm(forms.ModelForm):
item = forms.ModelChoiceField(queryset=Item.objects.all(), empty_label="(Nothing)")
quantity = forms.IntegerField(min_value=1)
def clean(self):
count = Item.objects.get(pk=self.item.pk)
if(self.quantity > count):
raise ValidationError("Insufficient inventory")
class Meta:
model = OrderedItem
Вот модели, которые я использую:
class Item(models.Model):
name = models.CharField(max_length=150)
inventory = models.PositiveIntegerField(default=0)
price = models.DecimalField(decimal_places=2, max_digits=5, default=0.0)
class Meta:
ordering = ('name',)
def __unicode__(self):
return self.name
class Order(models.Model):
customer = models.CharField(max_length=150)
setup = models.DateTimeField()
takedown = models.DateTimeField()
address = models.TextField()
created = models.DateField(auto_now_add=True)
def __unicode__(self):
return u"%s's order" % self.customer
class OrderedItem(models.Model):
order = models.ForeignKey(Order, related_name='ordered_items')
item = models.ForeignKey(Item, related_name='orders')
quantity = models.PositiveSmallIntegerField()
def __unicode__(self):
return u"%s (%d)" % (self.item, self.quantity)
И вид:
def order_form(request):
OrderedItemFormset = get_ordereditem_formset(OrderedItemForm, extra=1, can_delete=True)
order = Order()
if request.method == 'POST':
form = OrderForm(request.POST, instance=order)
formset = OrderedItemFormset(request.POST, instance=order)
if form.is_valid() and formset.is_valid():
order = form.save()
formset.save()
total = 0.0
data = []
for item in order.ordered_items.all():
data.append({
'order': item.order.id,
'product': str(item.item.name),
'quantity': item.quantity,
'total': (item.item.price*item.quantity)
})
total += float((item.item.price*item.quantity))
return render(request, "order_success.html", {
'ordered_items': data,
'grand_total': total,
'order_num': order.pk,
'order_name': order.customer,
})
else:
form = OrderForm(instance=order)
formset = OrderedItemFormset(instance=order)
return render(request, "order_form.html", {'form': form, 'formset': formset})