django覆盖一次删除级联

时间:2018-11-08 09:35:22

标签: python django django-models django-queryset

是否可以选择确保模型实例没有任何相关对象? 即,如果Person对象具有任何相关对象,则我需要此行

person.delete()

引发错误。

我不想为每个外键修改on_delete=models.CASCADE。我仅在这里需要这种保护,对于我的应用程序中的任何其他情况(例如django管理站点),我都更喜欢级联行为。

1 个答案:

答案 0 :(得分:1)

这符合您的需求吗?

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()