我有一个带模型的Django项目,如下所示:
class Track(models.Model):
title = models.CharField(max_length=255)
name = models.CharField(max_lenght=255)
class Disc(models.Model):
a_side_disc = models.ForeignKey(Track, null=True,
on_delete=models.SET_NULL)
b_side_disc = models.ForeignKey(Track, null=True,
on_delete=models.SET_NULL)
in_jukebox = models.BooleanField()
这个模型是完全组成的,没有意义,但它显示了我在这种情况下的当前设置。
现在有了Django 1.11和Django Restframework,我有一个删除Track的路由。当我呼叫路由时,我检查轨道是否在光盘上,in_jukebox设置为False。如果是这种情况,我只是继续删除。 我希望Disc中的两个ForeignKeys都设置为Null,但是Disc也会被删除,就像我期望的CASCADE一样。
我使用Postgres作为数据库,并检查生成的Schema。我知道SET_NULL是由django而不是数据库完成的。但它没有完成。 我理解错了吗? on_delete的工作方向是什么,如果只有一个,我如何在另一方面做同样的事情?