Django извлечение bool из списка

Я хочу извлечь булево значение из списка, но получаю ошибку:

TypeError: объект 'bool' не является подписываемым

В основном я возвращаю два значения из функции и одно из них является bool, но когда я хочу использовать его, я получаю ошибку

def validar_cupon(codigo_forma):

    today = date.today()

    if Promos.objects.filter(codigo = codigo_forma, inicia__lte = today, finaliza__gte = today).exists():
        desc = Promos.objects.filter(codigo = codigo_forma, inicia__lte = today, finaliza__gte = today).values_list('descuento', flat=True)
        
        return True, desc[0]
    else:
        return False

а для извлечения я использовал индекс:

vc = validar_cupon(codigo_forma)
vc1 = vc[0]

поэтому я получаю ошибку.

Иногда ваша функция возвращает False, иногда - кортеж. Это не очень хорошая практика. Скорее всего, вы получаете ошибку, когда возвращается False, а вы пытаетесь ее проиндексировать. Не видя фактической ошибки, я предполагаю, что это исправит ее...

def validar_cupon(codigo_forma):
    today = date.today()
    if Promos.objects.filter(codigo = codigo_forma, inicia__lte = today, finaliza__gte = today).exists():
        desc = Promos.objects.filter(codigo = codigo_forma, inicia__lte = today, finaliza__gte = today).values_list('descuento', flat=True)
        return True, desc[0]
    else:
        return False, None

по крайней мере, таким образом всегда возвращается кортеж с двумя элементами в нем.

Эти правки также сделают ваш код более читабельным и эффективным.

def validar_cupon(codigo_forma):
    today = date.today()
    obj = Promos.objects.filter(
        codigo = codigo_forma, inicia__lte = today, finaliza__gte = today
    ).only('descuento').first()
    if obj:
        return True, obj.descuento
    else:
        return False, None
Вернуться на верх