Привет, ребята, я пытаюсь сделать простой оператор if в Python, и я получаю сообщение об ошибке каждый раз, когда пытаюсь выполнить сравнение между пустым набором запросов.
Как лучше всего написать этот код, чтобы он не выдавал ошибку, если в проверочной переменной нет полей?
Если проверка оказывается пустой, я получаю сообщение об ошибке, когда запускаю оператор if (check[0].username == None).
Спасибо!
Вот мой код:
def upvote(request):
postID = request.POST.get("postID")
currentUser = request.POST.get("currentUser")
username = request.POST.get("username")
query = NewPost.objects.get(id = postID)
check = Vote.objects.filter(postID = postID) & Vote.objects.filter(username = currentUser)
if (check[0].username == None):
query.rating = query.rating +1
query.save()
query2 = User.objects.get(username = username)
query2.userRanking = query2.userRanking +1
query2.save()
new = Vote.objects.create(postID = postID, username = currentUser)
new.save()
pyautogui.hotkey('f5')
return render(request)
else:
pyautogui.hotkey('f5')
return render(request)






Лучше использовать функцию len(), чтобы проверить, есть ли какие-либо элементы внутри переменной check
Пример:
def upvote(request):
postID = request.POST.get("postID")
currentUser = request.POST.get("currentUser")
username = request.POST.get("username")
query = NewPost.objects.get(id = postID)
check = Vote.objects.filter(postID = postID) & Vote.objects.filter(username = currentUser)
if (len(check) > 0):
if (check[0].username == None):
query.rating = query.rating +1
query.save()
query2 = User.objects.get(username = username)
query2.userRanking = query2.userRanking +1
query2.save()
new = Vote.objects.create(postID = postID, username = currentUser)
new.save()
pyautogui.hotkey('f5')
return render(request)
else:
pyautogui.hotkey('f5')
return render(request)
Похоже, проблема с переменной request
Пожалуйста, рассмотрите возможность одобрения ответа, если он помог :)
Я думаю, что лучший способ сделать это — использовать метод exists(), потому что он сделает минимальный запрос к БД, чтобы получить результат (истина или ложь). Например:
check = Vote.objects.filter(postID = postID, username = currentUser)
if check.exists():
if username == None: # no need to use check[0].username, because they are the same thing.
Вместо этого, почему бы не использовать обработку ошибок/исключений для ошибки? Какая у вас ошибка? Это отличный и относительно простой случай, чтобы попробовать. (извините, не каламбур).