自定义Django管理员操作,删除ForeignKey相关的条目

时间:2011-06-25 16:37:23

标签: python django django-admin

我有两种模式:

A(models.Model):
    field = models.IntegerField()

B(models.Model):
    f = models.ForeignKey(A)

在管理员面板中,我有自定义操作,可清除(重置)Model A中的某些信息:

def clear_something(modeladmin, request, queryset):
     queryset.update(field=0)

如何自定义操作clear_something删除所有相关的Model B条目?

1 个答案:

答案 0 :(得分:2)

假设queryset是一组A,你应该能够遍历它们并删除每个的'b_set'(反向FK查找),如下所示:

def clear_something(modeladmin, request, queryset):
    queryset.update(field=0)
    for a in queryset:
        a.b_set.all().delete()

或者,使用B的模型管理器:

def clear_something(modeladmin, request, queryset):
    queryset.update(field=0)
    for a in queryset:
        B.objects.filter(f=a).delete()