Как сравнить список моделей с queryset в django?
У меня есть сериализатор:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = models.MyClass
fields = "__all__"
def validate(self, data):
user = self.context.get("request").user
users = data.get("users")
users_list = User.objects.filter(organization=user.organization)
return data
users выведет список моделей следующим образом: [<Пользователь: Пользователь 1>, <Пользователь: Пользователь 2>]
users_list отобразит кверисет: Queryset: <QuerySet [<User: User 1>, <User: User 2>, <User: User 3>]>
Я хочу написать запрос, который проверяет, присутствует ли список моделей, например, пользователей, в наборе users_list. Как это сделать?
Как я вижу, вам нужно сравнить каждую организацию User
с организацией request.user
. Если у вас есть список объектов, вы можете сделать это без QuerySet
:
user = self.context.get("request").user
users = data.get("users")
for u in users:
if u.organization == user.organization:
# do what you want if that's True or anything
return data
Вы можете использовать sets
, поскольку модели хэшируемы, если модель имеет первичный ключ:
>>> users
[<User: user1>, <User: user2>]
>>> users_list
<QuerySet [<User: user1>]>
>>> set(users).intersection(users_list)
{<User: user1>}
>>> set(users).difference(users_list)
{<User: user2>}
# and so on
Вы можете получить идентификаторы всех пользователей и преобразовать queryset в список, а затем проверить данные
users_list = list(User.objects.filter(organization=user.organization)
.values('id'))
if {'id': self.context.get("request").user.id} in users_list:
# do what you want if that's True or anything
users_list.