переопределить django удалить каскад за один раз - PullRequest
0 голосов
/ 08 ноября 2018

Есть ли возможность убедиться, что у экземпляра модели нет связанных объектов? т.е. если объект Person имеет какие-либо связанные объекты, я хочу эту строку

person.delete()

чтобы вызвать ошибку.

И я не хочу изменять on_delete=models.CASCADE для каждого внешнего ключа. Мне нужна эта защита только здесь, для любого другого случая в моем приложении (например, на сайте администратора django) я предпочитаю каскадное поведение.

1 Ответ

0 голосов
/ 08 ноября 2018

Это соответствует тому, что вы хотите?

has_related = False
for field in person.__class__._meta.get_fields():
    if field.is_relation:
        field_name = field.get_accessor_name()
        model_field = getattr(person, field_name)
        if not isinstance(model_field, models.Model) and model_field.all():
            has_related = True
            break

if not has_related:
    person.delete()
...