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

本文介绍了一个常见的Django模型定义错误——在使用ForeignKey字段时未指定'on_delete'参数导致的问题,并提供了详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在使用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,基本都可以解决。

 

Has anything you've done made your life better?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值