最近在使用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,基本都可以解决。
Django: __init__() missing 1 required positional argument: 'on_delete'报错解决方案
原文地址:https://www.cnblogs.com/imyalost/p/8506766.html
时间: 2024-10-29 04:39:18