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

时间:2018-01-08 20:53:10

标签: python django django-models

我试图运行我的代码,但我收到了这个错误:

  File "C:\Users\JOSHUA\Documents\ypgforum\myproject\boards\models.py", line 13, in <module>
    class Topic(models.Model):
  File "C:\Users\JOSHUA\Documents\ypgforum\myproject\boards\models.py", line 16, in Topic
    board = models.ForeignKey(Board, related_name='topics')
TypeError: __init__() missing 1 required positional argument: 'on_delete'

这是models.py指出:

class Topic(models.Model):
    subject = models.CharField(max_length=255)
    last_updated = models.DateTimeField(auto_now_add=True)
    board = models.ForeignKey(Board, related_name='topics')
    starter = models.ForeignKey(User, related_name='topics')
    last_updated = models.DateTimeField(auto_now_add=True)

1 个答案:

答案 0 :(得分:1)

您忘记指定删除外键所指向的对象时应该发生的事情;这是on_delete参数。请参阅ForeignKey documentation

  

多对一的关系。需要两个位置参数:与模型相关的类和on_delete选项。

ForeignKey.on_delete documentation

  

当删除ForeignKey引用的对象时,Django将模拟on_delete参数指定的SQL约束的行为。

从可用选项中选择一个(models.CASCADEmodels.PROTECTmodels.SET_NULLmodels.SET_DEFAULTmodels.SET()models.DO_NOTHING

从Django 2.0开始,该参数是必需的。在之前的Django版本中,参数是可选的,默认为models.CASCADE

如果您习惯了旧的行为,只需将其设置为旧的默认值:

board = models.ForeignKey(Board, models.CASCADE, related_name='topics')
starter = models.ForeignKey(User, models.CASCADE, related_name='topics')