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

Django模型关联Job与Images表迁移报错:int()参数类型异常

解决Django迁移错误:int() argument must be a string, a bytes-like object or a number, not 'datetime'

嘿,我来帮你搞定这个头疼的迁移错误!先拆解一下问题所在,再一步步解决:

1. 先修正一个低级拼写错误

你的代码开头写的是 from Django.db import models,这里的Django必须小写成django——这是Django框架的标准导入方式,拼写错误可能会引发一些莫名其妙的问题,先把这个改过来:

from django.db import models  # 小写django才对哦

2. 调整ForeignKey的字段命名(这是错误的核心原因)

在Images模型里,你把关联字段命名成了job_id,这其实踩了个小坑:Django会自动为ForeignKey字段在数据库中生成一个[字段名]_id的列来存储关联主键。比如你把字段命名为job,数据库里自动会有job_id字段,完全不用你手动命名。

更关键的是,这个错误提示说明:你之前的迁移记录里,job_id字段可能被设置成了DateTimeField之类的非整数类型,现在改成ForeignKey后,迁移工具试图把旧的datetime数据转成整数,自然就报错了。

修改后的模型代码应该是这样的:

from django.db import models

class Job(models.Model):
    job_id = models.IntegerField(default=1, primary_key=True)
    summary = models.CharField(max_length=200)
    upload = models.FileField(upload_to='uploads/')

class Images(models.Model):
    image_id = models.IntegerField(default=1, primary_key=True)
    image = models.ImageField(upload_to='images/')
    job = models.ForeignKey(Job, on_delete=models.CASCADE)  # 字段名改成job,剩下的交给Django

3. 如果改完模型还是报错?清理迁移历史!

要是调整完模型重新执行迁移还是出同样的错,那就是旧的迁移记录在搞鬼。按下面的步骤清理一下:

  • 找到你app下的migrations文件夹,删掉里面除了__init__.py之外的所有文件
  • 如果用的是SQLite数据库,直接删掉项目根目录的db.sqlite3文件;用其他数据库的话,直接清空对应的表或者重建数据库
  • 最后重新执行迁移命令:
python manage.py makemigrations
python manage.py migrate

这样就能建立干净的表结构,彻底解决这个类型转换的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:28