通过 M2M 中的存在来注释查询
Annotate query by existance in M2M
架构:表 A 和表 B,它们之间有 M2M。
我有一些 A 对象的查询集 QS0 和一个 B 对象的确切实例。
如果 B 通过 M2M 与 A 连接,如何将 QS0 注释为 True,否则如何注释为 False?
谢谢
给出下面的示例模型
from django.db import models
class ModelA(models.Model):
title = models.CharField(max_length=100)
class ModelB(models.Model):
title = models.CharField(max_length=100)
a_objects = models.ManyToManyField(ModelA, related_name='b_objects')
理论上,您应该能够通过以下方式注释 ModelA
个对象的查询集是否每个都链接到 ModelB
个对象。
from django.db.models import Case, When, Value
b_object = ModelB.objects.get(id=some_id)
QS0 = ModelA.objects.annotate(is_linked_to_b=Case(When(b_objects__id=b_object, then=Value(True)), default=Value(False), output_field=BooleanField())
# QSO[some_index].is_linked_to_b should return either True or False.
架构:表 A 和表 B,它们之间有 M2M。
我有一些 A 对象的查询集 QS0 和一个 B 对象的确切实例。
如果 B 通过 M2M 与 A 连接,如何将 QS0 注释为 True,否则如何注释为 False?
谢谢
给出下面的示例模型
from django.db import models
class ModelA(models.Model):
title = models.CharField(max_length=100)
class ModelB(models.Model):
title = models.CharField(max_length=100)
a_objects = models.ManyToManyField(ModelA, related_name='b_objects')
理论上,您应该能够通过以下方式注释 ModelA
个对象的查询集是否每个都链接到 ModelB
个对象。
from django.db.models import Case, When, Value
b_object = ModelB.objects.get(id=some_id)
QS0 = ModelA.objects.annotate(is_linked_to_b=Case(When(b_objects__id=b_object, then=Value(True)), default=Value(False), output_field=BooleanField())
# QSO[some_index].is_linked_to_b should return either True or False.