Как перебрать набор запросов в Django, как я получаю объект 'int' не повторяется
Я хочу получить объект из набора запросов
accounts = group.get_external_accounts(include_sub_groups=True)
try:
account: StripeExternalAccount = accounts.get(account_id)
except StripeExternalAccount.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
Я попробовал это. это работает нормально, но я хочу сделать это через попытку, кроме
account: StripeExternalAccount = None
for acc in accounts:
if acc.id == int(account_id):
account = acc
break
if not account:
return Response(status=status.HTTP_400_BAD_REQUEST)
1 ответ
Решение
Как следует из названия, .values_list()
возвращает list
ценностей и list
объект не имеет .get()
метод. Если get_external_accounts
возвращает набор запросов, вы можете просто использовать .get()
в наборе запросов:
accounts = group.get_external_accounts(include_sub_groups=True)
try:
account: StripeExternalAccount = accounts.get(id=account_id)
except StripeExternalAccount.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
Если вам понадобится список идентификаторов учетных записей ниже в вашем коде, вы можете добавить:
account_ids = accounts.values_list('id')
Возможно, стоит отметить, что получение одного accounts.get()
и получить список всех идентификаторов с accounts.values_list('id')
выполнит два запроса к вашей базе данных.
Если у вас есть несколько учетных записей с одинаковым идентификатором и вы хотите получить первый, используйте
account: StripeExternalAccount = accounts.filter(id=account_id).first()