Как показать ошибку на стороне клиента после валидации на стороне сервера в django

Я довольно новичок в django. Я хочу проверить значение, введенное пользователем для ввода значения цены на моей веб-странице, со всеми значениями в моей существующей базе данных при выполнении валидации на стороне сервера.
. Я использую django forms. В моей базе данных есть поля "имя" и "цена". Я хочу добавить введенные пользователем данные в базу данных, если введенное пользователем значение цены больше, чем все существующие значения цены в моей базе данных. В противном случае я хочу показать ошибку на стороне клиента, например, "введите большее значение".
Вот что я придумал на данный момент.

Вот моя форма в файле views.py

class myform (forms.Form):
    name = forms.CharField(max_length = 200)
    price= forms.IntegerField( validators = [MinValueValidator(0,0)], widget=forms.NumberInput(attrs={'min' : 0}))

Я пытаюсь подтвердить это здесь

    def add_item (request):
        if request.method == "POST":
            max_price = items.objects.order_by("-price").first().price
            if request.POST["price"] < max_price:
                return render(request,"myapp/items.html")
            else:
                items.objects.create(name = request.POST["name"] , price = request.POST["price"]) 
                return render(request,"myapp/index.html")

Я пытался использовать валидаторы для показа сообщения на стороне клиента, но это не удалось. потому что я не смог понять, как использовать записи базы данных в методах валидации, чтобы вызвать ошибки валидации.

Я думаю, что вы можете использовать вызовы 'AJAX' для проверки цены на стороне сервера (без необходимости отправки формы), и если цена не будет соответствовать вашим требованиям, вы можете вернуть ошибку, говорящую "пожалуйста, введите новое значение" .

Кроме того, поскольку вы не указали никакого вида html ввода, используя минимальные знания, я предложу вам отключить кнопку (по умолчанию), которая отправляет форму, пока не будет выполнена валидация, это можно сделать с помощью переменной, возвращаемой из вызова ajax

Ссылка: https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html

Простые шаги:

1.Отключить кнопку отправки по умолчанию

2.Создание ajax вызова

3.Проверьте ajax вызов, если цена удовлетворяет условию, то включите кнопку submit

4.Отправьте форму и введите новую цену в вашу базу данных

Пример вызова Ajax:

$.ajax(
    {
        url: "/your_url_for_ajax_function",
        data:{
                 price: priceinput            //priceinput is the value which 
                                                you get from the input field
        },
        success: function( data ) 
        {
            //Add the error part over here , and enable the submit button
        }
     })

Кроме того, я бы предложил создать еще один views.py (с другим именем) только для вызовов ajax, иначе ваш основной views.py может стать очень длинным, и функции будет очень трудно найти (кстати, нет никаких проблем с наличием разных видов функций в одном представлении, этот совет просто для удобства поиска и редактирования, в дальнейшем)

Вы также можете найти несколько видео на youtube, если ссылка покажется вам сложной для понимания

Удачи!

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