码迷,mamicode.com
首页 > 其他好文 > 详细

Django: __init__() missing 1 required positional argument: 'on_delete'报错解决方案

时间:2018-03-04 23:53:02      阅读:836      评论:0      收藏:0      [点我收藏+]

标签:直接   ons   关联   href   对象   code   phone   blank   col   

最近在使用Python的Django框架开发web站点,通过models.py文件建表后,执行数据库迁移(命令行:mange.py makemigrations)时报错,下面是查看官方文档后找到的解决方案。

官方文档:Model field reference

 

报错内容:

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'报错解决方案

标签:直接   ons   关联   href   对象   code   phone   blank   col   

原文地址:https://www.cnblogs.com/imyalost/p/8506766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!