Django执行makemigrations报错:__init__缺少必填参数'to'如何解决
问题复现环境
- Python版本:3.8.10
- Django版本:3.2.9
- 执行命令:
python3 manage.py makemigrations auth_app
错误原因
Django的ForeignKey字段定义时,to是必填的第一个位置参数,作用是指定当前外键关联的目标模型。从报错栈可以定位到,你在auth_app/models/account.py的Account模型中漏写了该参数:
# 错误写法 user = models.ForeignKey(related_name='account', on_delete= models.CASCADE)
缺少关联目标的ForeignKey初始化时就会抛出missing 1 required positional argument: 'to'的类型错误。
解决方法
根据你要关联的目标模型修改字段定义即可:
- 若关联Django内置用户模型,推荐两种写法:
# 写法1:直接引用内置User类 from django.contrib.auth.models import User user = models.ForeignKey(to=User, related_name='account', on_delete=models.CASCADE) # 写法2:引用配置项(自定义用户模型场景兼容性更好) from django.conf import settings user = models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='account', on_delete=models.CASCADE)
- 若关联自定义模型,将
to的参数值替换为对应的目标模型类即可。
修改保存后重新执行makemigrations命令即可正常生成迁移文件。
内容的提问来源于stack exchange,提问作者AllfSr
相关产品推荐
相关产品推荐

