Как сравнить список моделей с 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.

Вернуться на верх