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

How to check if an object is within an array's objects values?

我正在为 Django Rest Framework 构建服务器。它为房屋、合同和业主建模。基本上,一个 House 可以有几个 Contract,每个 Contract 有一个 Owner.

我正在为 House 编写一个 DetailView 的自定义权限,如果您拥有 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 语法之一。问题是 obj.contracts 大概是一个 ForeignKey,而 returns 是一个查询集;查询集不会有 owner 属性,即查询集中每个模型实例上的字段。

现在您可以执行此操作以获取所有所有者的列表:

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

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

if owner and obj.contracts.filter(owner=owner).exists()