可以使用什么代替on_delete CASCADE

时间:2018-02-06 06:47:00

标签: python django python-3.x

我创建了一个书籍应用程序,它有Publisher和Books模型。在Books Model中,我使用on_delete=models.CASCADE为Publisher分配了一个外键。实际上我不想使用这个on_delete函数,因为如果我从父表中删除数据,它也会删除子表上的数据。但我得到了:

  

TypeError: init ()缺少1个必需的位置参数:'on_delete'

如果我不使用on_delete = models.CASCADE

型号:

class Book(models.Model): 
    title = models.CharField(max_length = 30) 
    authors = models.ManyToManyField(Author) 
    publisher = models.ForeignKey(Publisher, on_delete = models.CASCADE) 
    publication_date = models.DateField() 

    def __str__(self): 
        return self.title

2 个答案:

答案 0 :(得分:0)

自Django 2.0起,on_deleterequired。您可以为on_delete提供多种选项,详细here

答案 1 :(得分:0)

必须从Django V2.0添加on_delete函数,所以你可以设置(tablename,on_delete = SET_NULL,blank = True,null = True)。如果您不想在删除父数据时从子表中删除数据。

  

publisher = models.ForeignKey(Publisher,models.SET_NULL,blank = True,null = True)