-1

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

我正在为DetailViews编写一个自定义权限House,如果您拥有该 s 应该只允许请求House(如果您有一个sContract并且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 中表达该条件。

你会怎么写这个?非常感谢

4

1 回答 1

1

正如我在评论中提到的,问题不是 Python 语法之一。问题在于,obj.contracts它可能是一个 ForeignKey,它返回一个查询集;查询集没有owner属性,即查询集中每个模型实例上的字段。

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

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

but that would be the wrong solution. What you actually want to do is to ask the database if the owner is in the list of contract owners:

if owner and obj.contracts.filter(owner=owner).exists()
于 2019-02-18T10:15:26.473 回答