当我得到'int'对象时,如何遍历django中的queryset是不可迭代的

时间:2019-05-23 07:09:40

标签: django python-3.x django-rest-framework django-queryset drf-queryset

我想从查询集中获取对象

 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 个答案:

答案 0 :(得分:2)

顾名思义,.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)

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

account_ids = accounts.values_list('id')

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

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

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