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

Django中Profile无法更新,抛出int()参数类型错误

Django更新Profile模型时int()参数错误排查与解决

更新Profile用户模型时抛出错误:

int() argument must be a string, a bytes-like object or a real number, not 'function'

问题原因

  • 字段类型与Choices键类型不匹配:gender、status_marriage、method_introduction、tahsilat均为CharField,但对应的Choices选项使用了整数类型的键(如(0, 'مرد'))。表单提交时传递的是字符串类型值,Django匹配Choices时会尝试将字符串转成整数,触发类型转换错误。
  • Semat字段默认值无效:semat字段默认值设为'0',但对应的Semat Choices中不存在该选项值,导致验证或保存流程中出现类型相关异常。

解决方案

方案一:统一Choices键与字段类型(推荐)

将所有CharField对应的Choices整数键改为字符串类型,确保与字段类型一致:

# 修正后的Choices定义
Gender = (
    ('', 'انتخاب کنید'),
    ('0', 'مرد'),
    ('1', 'زن'),
)

Status_Marriage = (
    ('', 'انتخاب کنید'),
    ('0', 'متاهل'),
    ('1', 'مجرد'),
)

Method_Introduction = (
    ('', 'انتخاب کنید'),
    ('0', 'تلگرام'),
    ('1', 'وب سایت'),
    ('2', 'تبلیغات'),
    ('3', 'روزنامه'),
    ('4', 'بیلبورد'),
    ('5', 'اینستاگرام'),
    ('6', 'سایر'),
)

Tahsilat = (
    ('', 'انتخاب کنید'),
    ('0', 'پیش دبستانی'),
    ('1', 'دبستان دوره اول'),
    ('2', 'دبستان دوره دوم'),
    ('3', 'متوسط یک'),
    ('4', 'متوسط دو'),
    ('5', 'دیپلم'),
    ('6', 'پیش دانشگاهی'),
    ('7', 'کاردانی'),
    ('8', 'دانشجو کاردانی'),
    ('9', 'کارشناسی'),
    ('10', 'دانشجو کارشناسی'),
    ('11', 'کارشناسی ارشد'),
    ('12', 'دانشجو کارشناسی ارشد'),
    ('13', 'دکترا'),
    ('14', 'دانشجو دکترا'),
)

方案二:修改字段类型为IntegerField

若希望保留Choices的整数键,可将对应字段改为IntegerField:

# 模型中字段修改示例
gender = models.IntegerField(choices=Gender, verbose_name='جنسیت', null=True)
status_marriage = models.IntegerField(choices=Status_Marriage, verbose_name='وضعیت تاهل', null=True)
method_introduction = models.IntegerField(choices=Method_Introduction, verbose_name='طریقه آشنایی', null=True)
tahsilat = models.IntegerField(choices=Tahsilat, verbose_name='تحصیلات', null=True)

修正Semat字段默认值

将semat字段的默认值改为Semat Choices中存在的选项,比如空字符串或有效键:

semat = models.CharField(max_length=50, choices=Semat, null=True, verbose_name='سمت', default='')
# 或设置为某个有效选项,例如 default='student'

后续操作

修改完成后执行数据库迁移:

python manage.py makemigrations
python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:22:06