最近在使用Python的Django框架开发web站点,通过models.py文件建表后,执行数据库迁移(命令行:mange.py makemigrations)时报错,下面是查看官方文档后找到的解决方案。
报错内容:
1 class Guest(models.Model):
2 File "C:\Users\dell\guest\sign\models.py", line 18, in Guest
3 event = models.ForeignKey(Event) # 关联发布会
4 TypeError: __init__() missing 1 required positional argument: ‘on_delete‘
models.py文件:
1 from django.db import models
2
3 # Create your models here.
4 # 发布会表
5 class Event(models.Model):
6 name = models.CharField(max_length=100) # 发布会标题
7 limit = models.IntegerField() # 参加人数
8 status = models.BooleanField() # 状态
9 address = models.CharField(max_length=200) # 地址
10 start_time = models.DateTimeField(‘event time‘) # 发布会时间
11 create_time = models.DateTimeField(auto_now=True) # 创建时间(自动获取当前时间)
12
13 def __str__(self):
14 return self.name
15
16 # 嘉宾表
17 class Guest(models.Model):
18 event = models.ForeignKey(Event) # 关联发布会
19 realname = models.CharField(max_length=64) # 姓名
20 phone = models.CharField(max_length=16) # 手机号
21 email = models.EmailField() # 邮箱
22 sign = models.BooleanField() # 签到状态
23 create_time = models.DateTimeField(auto_now=True) # 创建时间(自动获取当前时间)
24
25 class Meta:
26 unique_together = ("event", "phone")
27
28 def __str__(self):
29 return self.realname
解决方法:将报错提示的models文件第18行修改为下面的内容即可:
event = models.ForeignKey(‘Event‘,‘on_delete=models.CASCADE,‘)
报错原因:
classForeignKey(to,on_delete,** options)
多对一的关系,需要两个位置参数:模型相关的类和on_delete选项。(on_delete
实际上并不需要,但是不提供它会给出弃用警告,这在Django 2.0中将是必需的,1.8及以前的版本不需要)
要创建递归关系,即:与自身具有多对一关系的对象使用。 models.ForeignKey(‘self‘, on_delete=models.CASCADE)
PS:Django的版本更新比较频繁,每次版本迭代都有些改动,有问题直接查官方文档或者Stack Overflow,基本都可以解决。