当我得到 'int' object is not iterable 时,如何在 Django 中迭代查询集

how to iterate over a queryset in django as i get 'int' object is not iterable

我想从查询集中获取对象

 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)

这个我试过了。它工作正常,但我想通过 try except

来完成
   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)

顾名思义,.values_list() returns 一个 list 值和一个 list 对象没有 .get() 方法。如果 get_external_accounts returns 一个查询集,你可以简单地在查询集上使用 .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)

如果稍后在您的代码中需要帐户 ID 列表,您可以添加:

account_ids = accounts.values_list('id')

可能值得指出的是,获取 accounts.get() 的单个项目 获取包含 accounts.values_list('id') 的所有 ID 的列表将执行两个查询以你的数据库。

如果您有多个具有相同 ID 的帐户并且想获得第一个,请使用

account: StripeExternalAccount = accounts.filter(id=account_id).first()