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

时间:2015-03-04 14:02:00

标签: python django many-to-many

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

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

并希望删除所有" Man" views.py中的对象:

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

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

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

获取错误: '查询集'对象没有属性'女朋友'。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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