我试图运行我的代码,但我收到了这个错误:
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)
答案 0 :(得分:1)
您忘记指定删除外键所指向的对象时应该发生的事情;这是on_delete
参数。请参阅ForeignKey
documentation:
多对一的关系。需要两个位置参数:与模型相关的类和
on_delete
选项。
和ForeignKey.on_delete
documentation:
当删除ForeignKey引用的对象时,Django将模拟
on_delete
参数指定的SQL约束的行为。
从可用选项中选择一个(models.CASCADE
,models.PROTECT
,models.SET_NULL
,models.SET_DEFAULT
,models.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')