Django ORM 什么时候检查

Django ORM When check

我想查询特定用户是否与特定对象有关系。 例如:

user = User.objects.first()
modelA.objects.annotate(has_user=Case(When( XXXXXX, 
     then=Value(True)), default=Value(False), output_field=BooleanField())))

XXXX 应替换为检查 model_b_set.values_list('user', flat=True) 是否包含给定用户的代码。

已更新

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')

用户模型是自定义的,但不会反映在其他模型上 还更新了代码示例以适合我的示例模型

我认为在这里使用带有子查询的 Exists [Django-doc] 更好,例如:

from django.db.models import Exists, OuterRef

modelA.objects.annotate(
    is_following_by_user=Exists(
        ModelB.objects.filter(user=my_user, modelA=OuterRef('pk'))
    )
)

因此我们检查每个 ModelA 对象是否存在 ModelB 其中 usermy_user,并且 modelA 是主键ModelA 对象。