Пользовательское действие администратора Django, удаление записей, связанных с ForeignKey - PullRequest
1 голос
/ 25 июня 2011

У меня есть две модели:

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 Ответ

2 голосов
/ 25 июня 2011

Предполагая, что набор запросов представляет собой набор из 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...