当我得到 '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()
我想从查询集中获取对象
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()