如何检查对象是否在数组的对象值内?
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()
我正在为 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()