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