Как показать ошибку на стороне клиента после валидации на стороне сервера в 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
Простые шаги:
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, если ссылка покажется вам сложной для понимания
Удачи!