删除没有外键警告的 django 模型类对象

Posted

技术标签:

【中文标题】删除没有外键警告的 django 模型类对象【英文标题】:Deleting a django model class object without foreignkey warning 【发布时间】:2019-05-09 06:28:00 【问题描述】:

我在 mysql 中有两个用 django 模型创建的表。一个是学生模型,另一个是考勤模型。

class Attendance(BaseModel):
    stu = models.ForeignKey(Students, verbose_name=_("Student"))

我没有将“on_delete=models.PROTECT”放在出勤类的 stu 中,因为如果这个学生在出勤中被定义为学生类的外键,我需要能够在没有保护警告的情况下删除一个学生对象。

现在,当我删除学生对象时,考勤中的外键连接记录也被删除。

我想做的是,我想在没有警告的情况下删除学生对象。但我希望出勤中连接的外键记录应该留在那里以获取历史报告。

Students 对象将被删除而不发出警告,并且出勤中的外键相关行不会被删除。

【问题讨论】:

【参考方案1】:

根据您的描述,您似乎应该使用on_delete=models.SET_NULL。通过这种方法,外键值不会被删除,而是将它们与已删除项的关系 id 设置为 null。

因此 Student 对象将被删除,stu 值将设置为 Null。

【讨论】:

已解决。谢谢! 任何时候我的朋友 :)

以上是关于删除没有外键警告的 django 模型类对象的主要内容,如果未能解决你的问题,请参考以下文章

django的模型类管理器-----------数据库操作的封装

django - 模型 unicode() 显示外键对象属性

删除 2 个作为外键相互引用的模型不同对象

编写一个 django 查询并在一次数据库中获取反向相关对象!

Django表关联对象及多表查询

Django ORM 操作