Как проверить, находится ли объект в значениях объектов массива?
Я создаю сервер для Django Rest Framework. Он моделирует дома, договоры и владельцев. В основном, House
может иметь несколько Contract
с и каждый Contract
имеет Owner
,
Я пишу пользовательское разрешение для DetailView
с для House
s, которые должны разрешить запрос, только если вы владеете 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.
Как бы вы пошли о написании этого? большое спасибо
1 ответ
Как я упоминал в комментарии, проблема не в синтаксисе Python. Проблема в том, что obj.contracts
предположительно ForeignKey, который возвращает набор запросов; набор запросов не будет иметь owner
атрибут, то есть поле в каждом из экземпляров модели в наборе запросов.
Теперь вы можете сделать это, чтобы получить список всех владельцев:
if owner and owner in obj.contracts.values_list('owner', flat=True)
но это было бы неправильным решением. Что вы на самом деле хотите сделать, это спросить базу данных, есть ли владелец в списке владельцев контрактов:
if owner and obj.contracts.filter(owner=owner).exists()