首页 文章

删除django模型中的不相关对象(manytomanyfield)

提问于
浏览
1

我有一个模型用于其他模型相关 . (这个例子只是为了说明模型)

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字段,我想知道是否有办法直接查询连接图 .

如果我是对的,加入 Map 应该是 A.locations.through ,如何使用Django ORM查询该表中的位置?也许还有更好的方法吗?

1 回答

  • 0

    我们从模型A和B中获取实际位置,然后从ids中进行设置,然后删除未使用的位置模型中的所有位置 .

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

相关问题