清除 Django 中多个对象的多对多

Clear many to many on multiple objects in Django

有没有办法在delete()方法之前批量清除对象关系? 我有一个模型:

class Man(models.Model):
     girlfriends = model.ManyToManyField('Girl')

并想删除 views.py 中的所有 "Man" 个对象:

def delete_all_objects(request):
    men = Man.objects.all()

    #trying to clear objects. getting an error
    men.girlfriends.clear()

    men.delete()
    return HttpResponse("success")

获取错误: 'QuerySet' 对象没有属性 'girlfriends'。

错误正确,查询集没有 'girlfriends' 属性。这是因为查询集是一组 Man 个对象,并且每个 这些 都具有属性

def delete_all_objects(request):
    men = Man.objects.all()
    for man in men:
        man.girlfriends.clear()
        man.delete()
    return HttpResponse('success')

我还没有对此进行测试,但它应该非常接近您的需要。

除非您还试图删除所有相关的女孩,否则 men.delete() 将完全达到您的要求。中间 table 有一个指向 Man 的外键,删除一个对象将默认删除指向它的所有外键(除非您覆盖 on_delete 行为)。