如何检查对象是否在数组的对象值内?

问题描述 投票:0回答:1

我正在为 Django Rest Framework 构建服务器。它为房屋、合同和业主建模。基本上,一个

House
可以有多个
Contract
,每个
Contract
都有一个
Owner

我正在为

DetailView
编写一个
House
的自定义权限,如果您拥有
House
(如果您拥有该
Contract
House
并且您是
Owner

这是我到目前为止所拥有的:

class UserOwnsTheHouseSlugInUrlPermission(permissions.BasePermission):
    """
    Permission to check if the user is an owner for the given House.
    This permission needs a house_slug to be given in the url.
    """
    message = _(USER_IS_NOT_OWNER_PERMISSION_DENIED_MESSAGE)

    def has_object_permission(self, request, view, obj):
        owner = get_object_or_None(UserOwnerProfile, user=request.user)
        if owner and owner in obj.contracts.owner:
            return True

        return False

此代码不起作用。在 JavaScript 中你可以这样写:

if(obj.contracts.map(contract => contract.owner).includes(owner))

或者类似的东西。 Python 不是我的主要语言,所以我不知道如何在 Python 或 Django 中表达该条件。

我该如何写这个?

python django if-statement django-rest-framework python-object
1个回答
1
投票

正如我在评论中提到的,问题不在于 Python 语法。问题是

obj.contracts
可能是一个外键,它返回一个查询集;查询集不会有
owner
属性,即查询集中每个模型实例上的一个字段。

现在您可以这样做来获取所有所有者的列表:

if owner and owner in obj.contracts.values_list('owner', flat=True)

但这将是错误的解决方案。你真正想做的是询问数据库所有者是否在合同所有者列表中:

if owner and obj.contracts.filter(owner=owner).exists()
© www.soinside.com 2019 - 2024. All rights reserved.