我有一个模型在其他模型中用作相关的。 (这个例子只是为了给出模型的概念)
class A(Models.model):
locations = models.manytomanyfield(Location)
class B(Models.model):
location = models.foreignkeyfield(Location)
class Location(Models.model):
foo = models.charfield(...)
现在我要删除所有与A和B无关的位置实例。对于B类中的foreignkeyfield很容易使用filter(),但对于A类中的manytomany字段,我想知道是否有一种直接查询连接图的方法。
如果我是对的,加入地图应该是 A.locations.through ,我如何使用Django ORM查询该表中的位置?也许有更好的方法来做到这一点?
答案 0 :(得分:0)
我们从模型A和B中获取实际位置,然后从ID中进行设置,然后删除未使用的位置模型中的所有位置。
set_a = set(A.objects.all().values_list('locations', flat=True)
set_b = set(B.objects.all().values_list('locations', flat=True)
locations = set_a | set_b
locations.discard(None)
Location.objects.filter(~Q(id__in=locations)).delete()