首页 > 解决方案 > django覆盖删除级联一次

问题描述

是否有确保模型实例没有任何相关对象的选项?即,如果 Person 对象有任何相关对象,我想要这一行

person.delete()

引发错误。

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

标签: pythondjangodjango-modelsdjango-queryset

解决方案


这符合你想要的吗?

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

推荐阅读