Исключение существующих пользователей в поле ManyToManyField

Я создаю небольшой BlogApp и создаю функцию добавления любимых пользователей. Пользователь может найти и добавить пользователя в свой список избранных пользователей

Сейчас я создаю функцию if searched user is already in another's users favorite user list then exclude the user from the result

Например :- Если пользователь_1 добавил пользователя_50 в список своих любимых пользователей. и тогда, если пользователь_2 ищет пользователя_50, то он не будет отображаться в списке поиска.

НО когда я пытаюсь исключить, он не исключает.

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE,unique=True)
    full_name = models.CharField(max_length=100,default='')
    friends = models.ManyToManyField("Profile",blank=True)
    email = models.EmailField(max_length=60,default='')

class FavouriteUsers(models.Model):
    adder = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    favouriteUser = models.ManyToManyField(User, related_name='favouriteUser', blank=True)

views.py

def search_users_favourite(request):
    q = request.GET.get('q')
    exclude_this = FavouriteUsers.objects.filter(favouriteUser=request.user)

    results = Profile.objects.filter(user__username__icontains=q).exclude(exclude_this)
    serialized_results = []
    for result in results:
        serialized_results.append({
            'id': result.id,
            'username': result.user.username,
        })

    return JsonResponse({'results': serialized_results})

НО это показывает :-

TypeError: Невозможно фильтровать по безусловному выражению.

Я пробовал много раз, но все равно эта ошибка.

Любая помощь будет оценена по достоинству.

Заранее благодарю вас.

Я думаю, что вы должны делать это таким образом

exclude_this = FavouriteUsers.objects.filter(favouriteUser=request.user).values_list('favouriteUser__username',flat=True)

results = Profile.objects.filter(user__username__icontains=q).exclude(user__username__in=exclude_this) здесь, я предполагаю, вы хотите исключить имена пользователей, совпадающие с полным именем.

Для более точного ответа, пожалуйста, приложите журнал ошибки.

Попробуйте этот запрос:

Profile.objects.filter(user__username__icontains=q, user__favouriteUser__isnull=True)

Это исключит все профили, которые уже отображены в FavouriteUsers (уже были любимыми)

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