Vous pouvez travailler avec une sous-requête ici, mais cela n'aura pas beaucoup d'importance en termes de performances, je pense :
from django.db.models import Exists, OuterRef, Q
UserNames.objects.filter(
Exists(UserNames.objects.filter(
~Q(user_id=OuterRef('user_id')),
first_name=OuterRef('first_name')
))
)
ou avant django-3.0 :
from django.db.models import Exists, OuterRef, Q
UserNames.objects.annotate(
has_other=Exists(UserNames.objects.filter(
~Q(user_id=OuterRef('user_id')),
first_name=OuterRef('first_name')
))
).filter(has_other=True)
Nous conservons donc les UserNames
les objets pour lesquels il existe un UserNames
objet avec le même first_name
, et avec un user_id
différent .