Как перебрать набор запросов в Django, как я получаю объект 'int' не повторяется - PullRequest
1 голос
/ 23 мая 2019

Я хочу получить объект из набора запросов

 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 Ответ

2 голосов
/ 23 мая 2019

Как следует из названия, .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()
...