Reputation: 514
I would like to make a query to know whether particular user has relation with specific object. As for example:
user = User.objects.first()
modelA.objects.annotate(has_user=Case(When( XXXXXX,
then=Value(True)), default=Value(False), output_field=BooleanField())))
XXXX should be replaced with code which checks whether model_b_set.values_list('user', flat=True)
contains given user.
UPDATED
class ModelA(models.Model):
user = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='model_a_set')
class ModelB(models.Model):
modelA = models.ForeignKey('models_a.ModelA', on_delete=models.CASCADE, related_name='model_b_set')
user = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='model_b_set')
User model is custom but it will not reflect on other models Also updated example of code in order to fit to my example models
Upvotes: 1
Views: 73
Reputation: 476740
I think it is better here to use an Exists
[Django-doc] with a subquery, like:
from django.db.models import Exists, OuterRef
modelA.objects.annotate(
is_following_by_user=Exists(
ModelB.objects.filter(user=my_user, modelA=OuterRef('pk'))
)
)
Here we thus check per ModelA
ojbect if there exists a ModelB
for which user
is my_user
, and modelA
is the primary key of that ModelA
object.
Upvotes: 1