【问题标题】:Django ORM: ForeignKey=self and on_delete=PROTECTDjango ORM:ForeignKey=self 和 on_delete=PROTECT
【发布时间】:2021-12-27 13:24:25
【问题描述】:

我有下一个字段的模型:

some_field = ForeignKey('self', on_delete=PROTECT, blank=true, null=true, editable=false)

这个字段存在的意义和作用是什么? 我也不能删除这个模型 id adminpanel 的 obj,因为它说“你不能删除 obj A,因为需要删除下一个受保护的 obj:obj A”

在这个 some_field 中出现这种情况的原因是什么?

【问题讨论】:

    标签: python sql django django-orm


    【解决方案1】:

    您不能在管理面板中删除此字段/对象,因为它是外键。并且数据可能在另一个表中链接到它。所以为了删除这个对象,你需要删除这个外键链接的表中所有可用的相关对象。您可以在此处阅读有关关系的更多信息

    https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/

    【讨论】:

      【解决方案2】:

      如果您要删除的对象是通过外键关系引用的,Django 会阻止您删除它,因为您设置了:on_delete=PROTECT

      如果你想允许删除,你也必须删除相关的对象。如果你想要这种行为:

      from django.db.models import CASCADE
      
      some_field = ForeignKey('self', on_delete=CASCADE, blank=true, null=true, editable=false)
      

      【讨论】:

        猜你喜欢
        • 2013-08-04
        • 2016-08-02
        • 2016-04-27
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        • 2018-11-03
        • 2020-06-14
        • 1970-01-01
        相关资源
        最近更新 更多