Лучший способ написать оператор If в Python с набором запросов, который находится вне индекса?

Привет, ребята, я пытаюсь сделать простой оператор 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)

Вместо этого, почему бы не использовать обработку ошибок/исключений для ошибки? Какая у вас ошибка? Это отличный и относительно простой случай, чтобы попробовать. (извините, не каламбур).

BruceWayne 10.12.2020 05:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Лучше использовать функцию 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

Harshana 10.12.2020 05:40

Пожалуйста, рассмотрите возможность одобрения ответа, если он помог :)

Harshana 10.12.2020 05:41

Я думаю, что лучший способ сделать это — использовать метод 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.

Другие вопросы по теме