Показать ValidationError в шаблоне - Django
Я разрабатываю программу, которая состоит из продаж.
Я хочу, чтобы при регистрации продажи, если на складе нет достаточного количества запрашиваемого товара, появлялась ошибка, указывающая на отсутствие товара на складе.
Я смог сделать это, но я получаю ошибку ValidationError следующим образом:
ValidationError at /ventas/create/
['No hay suficiente stock del producto.']
forms.py:
class VentasForm(forms.ModelForm):
"""Formulario modelo de ventas."""
class Meta:
"""Meta class."""
model = Venta
fields = ('fecha', 'cliente', 'producto', 'cantidad', 'forma_pago')
def save(self):
"""Restar stock."""
data = super().clean()
producto = Product.objects.get(id=data['producto'].pk)
verificar_stock = producto.cantidad - float(data['cantidad'])
if verificar_stock >= 0:
producto.cantidad -= float(self.data['cantidad'])
else:
raise forms.ValidationError('No hay suficiente stock del producto.')
producto.save()
views.py:
class CreateVentasView(CreateView):
"""Registrar venta."""
template_name = 'ventas/create.html'
form_class = VentasForm
success_url = reverse_lazy('ventas:list')
context_object_name = 'venta'
и в шаблоне: {{ form.as_p }}
Ваш метод ModelForm
save()
выбрасывает возвращаемое значение сохранения суперкласса. Вам нужно вернуть его, например,
def save(self):
"""Restar stock."""
data = self.cleaned_data
producto = Product.objects.get(id=data['producto'].pk)
producto.cantidad -= float(data['cantidad'])
### HERE I HAVE ADDED RETURN ###
return producto.save()
Общее правило: если вы точно знаете, что метод, который вы переопределяете, никогда ничего не вернет, то вам не нужно беспокоиться о возврате чего-либо. Но если есть вероятность того, что переопределяемый метод может вернуть что-то полезное (сейчас или в будущем), то перестрахуйтесь и верните все, что он вернет. Это избавит вас от головной боли в дальнейшем.