You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中外键能否设默认参数?设字符串默认值创建超级用户报错求助

Django ForeignKey默认值错误解决

错误原因

ForeignKey字段实际存储的是关联模型的主键(默认是id,整数类型),你给的默认值'personal'是字符串,类型不匹配,Django尝试把这个字符串当作主键id解析,就抛出了ValueError: Field 'id' expected a number but got 'personal'错误。

解决方法

你需要让默认值指向Genders模型中已存在的实例的主键,推荐用以下方式处理:

步骤1:定义获取默认gender的函数

在models.py中添加一个函数,自动创建或获取get_gender='personal'的记录,返回它的主键id:

def get_default_gender():
    # 查找或创建get_gender为personal的记录
    gender_obj, _ = Genders.objects.get_or_create(get_gender='personal')
    return gender_obj.id

步骤2:修改ForeignKey字段的默认值

把CustomUser中的gender字段默认值改成这个函数:

gender = models.ForeignKey(Genders, default=get_default_gender, on_delete=models.CASCADE)

步骤3:更新迁移并应用

在终端执行以下命令,更新数据库结构:

python manage.py makemigrations
python manage.py migrate

这样设置后,创建超级用户时如果不指定gender,会自动关联到get_gender='personal'的Genders记录,不会再报错。另外,创建超级用户时,Django会提示你输入自定义字段的值,你也可以直接输入已存在的Genders记录的id来指定。

内容的提问来源于stack exchange,提问作者Nicolas_Darksoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:15:38