Показать 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()

Общее правило: если вы точно знаете, что метод, который вы переопределяете, никогда ничего не вернет, то вам не нужно беспокоиться о возврате чего-либо. Но если есть вероятность того, что переопределяемый метод может вернуть что-то полезное (сейчас или в будущем), то перестрахуйтесь и верните все, что он вернет. Это избавит вас от головной боли в дальнейшем.

Вернуться на верх