TypeError:int() 参数必须是字符串或数字,而不是 'datetime.datetime'

Posted

技术标签:

【中文标题】TypeError:int() 参数必须是字符串或数字,而不是 \'datetime.datetime\'【英文标题】:TypeError: int() argument must be a string or a number, not 'datetime.datetime'TypeError:int() 参数必须是字符串或数字,而不是 'datetime.datetime' 【发布时间】:2015-12-03 02:28:08 【问题描述】:

我已将 App12/models.py 模块设为:

from django.db import models

class Question(models.Model):

    ques_text=models.CharField(max_length=300)
    pub_date=models.DateTimeField('Published date')

    def __str__(self):
        return self.ques_text

class Choice(models.Model):

    # question=models.ForeignKey(Question)
    choice_text=models.CharField(max_length=300)
    votes=models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

然后我运行 cmds

 python manage.py makemigrations App12
 python manage.py migrate

然后在 Question 模型中输入 2 条记录为:

Question.objects.create(ques_text="How are you?",pub_date='timezone.now()') 
                 # and (ques_text="What are you doing?",pub_date='timezone.now()')

然后我意识到问题和选择模型应该是外键关系并取消注释模型代码中的上述注释语句

当我运行“python manage.py makemigrations App12”时,它运行良好,但之后,我得到了

"TypeError: int() argument must be a string or a number, not 'datetime.datetime"

运行“python manage.py migrate”命令时出错。

谁能帮帮我。我现在如何在 Choice 模型和 Question 模型之间添加外键关系。

【问题讨论】:

回溯是否提到了错误在哪里? 你评论的 ForeignKey 有什么问题? 完全没有问题。但是在我做代码的时候出现了这个问题。首先我忘记添加外键关系,但过了一段时间,我意识到问题和选择模型之间应该有外键关系.但是执行迁移命令,它显示了上述错误。为什么它显示这样的错误,我怎样才能摆脱这个问题。 【参考方案1】:

从您的迁移文件中,您收到此错误是正常的,您正在尝试将日期时间存储在需要为 int 的外键上。

当迁移询问您将为旧的 Choice 行设置哪个值时会发生这种情况,因为需要新的 ForeignKey。

要解决它,您可以更改迁移文件并将 datetime.date... 更改为 Question 表中的有效 id,如下面的代码。或者删除迁移文件并重新运行 ./manage.py makemigrations,此时系统会询问您默认值提示有效的问题 ID,而不是日期时间。

from future import unicode_literals
from django.db import models, migrations
import datetime

class Migration(migrations.Migration):
    dependencies = [ ('App11', '0003_remove_choice_question'), ]
    operations = [
        migrations.AddField(
            model_name='choice',
            name='question',
            field=models.ForeignKey(default=1, to='App11.Question'), preserve_default=False, ),
    ]

【讨论】:

删除“迁移”并重新运行“./manage.py makemigrations”解决了类似的问题。【参考方案2】:

pub_date 不应该是字符串。创建对象如下:

from django.utils import timezone
Question.objects.create(ques_text="How are you?",pub_date=timezone.now()) 

【讨论】:

是的,你说得对,pub_date 在我的语句 pub_date='timezone.now()' 中不应该是一个字符串,但我应该喜欢:pub_date=timezone.now(),实际上它是由我错了。但是,问题是一样的。任何人都可以帮助我并告诉我为什么会这样吗?? 能否提供App12/migrations中文件的内容?我怀疑你生成了不正确的迁移。 from future import unicode_literals from django.db import models, migrations import datetime class Migration(migrations.Migration): dependencies = [ ('App11', '0003_remove_choice_question'), ] 操作 = [ migrations.AddField(model_name='choice', name='question', field=models.ForeignKey(default=datetime.date(2015, 9, 7), to='App11.Question'), preserve_default=错误, ), ]

以上是关于TypeError:int() 参数必须是字符串或数字,而不是 'datetime.datetime'的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“DataFrame”

Django TypeError int() 参数必须是字符串或数字,而不是 'QueryDict'

Python 2 - TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是使用 Python 3.7 时的“NoneType”

Django 保存到 DB:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“元组”

LabelEncoder -- TypeError: 参数必须是字符串或数字