2015-01-04 85 views
0

我在模型中添加了一些新字段,django建议我添加默认值或在模型中设置一些默认参数。我将datetime对象添加为值,但值应该是int或数字。现在我不能同步数据库,因为类型错误。我试图删除一些对象,这是这个模型的实例,我做了一些改变,但它并没有帮助我。TypeError与模型字段

我现在可以如何修复我的模型?!

这是回溯

Applying card.0026_auto_20150104_1323...Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\__init__.p 
y", line 385, in execute_from_command_line 
    utility.execute() 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\__init__.p 
y", line 377, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\base.py", 
line 288, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\base.py", 
line 338, in execute 
    output = self.handle(*args, **options) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\base.py", 
line 533, in handle 
    return self.handle_noargs(**options) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\commands\s 
yncdb.py", line 27, in handle_noargs 
    call_command("migrate", **options) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\__init__.p 
y", line 115, in call_command 
    return klass.execute(*args, **defaults) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\base.py", 
line 338, in execute 
    output = self.handle(*args, **options) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\core\management\commands\m 
igrate.py", line 160, in handle 
    executor.migrate(targets, plan, fake=options.get("fake", False)) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\migrations\executor.py" 
, line 63, in migrate 
    self.apply_migration(migration, fake=fake) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\migrations\executor.py" 
, line 97, in apply_migration 
    migration.apply(project_state, schema_editor) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\migrations\migration.py 
", line 107, in apply 
    operation.database_forwards(self.app_label, schema_editor, project_state, ne 
w_state) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\migrations\operations\f 
ields.py", line 37, in database_forwards 
    field, 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\backends\sqlite3\schema 
.py", line 167, in add_field 
    self._remake_table(model, create_fields=[field]) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\backends\sqlite3\schema 
.py", line 74, in _remake_table 
    self.effective_default(field) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\backends\schema.py", li 
ne 184, in effective_default 
    default = field.get_db_prep_save(default, self.connection) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\models\fields\related.p 
y", line 1735, in get_db_prep_save 
    return self.related_field.get_db_prep_save(value, connection=connection) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\models\fields\__init__. 
py", line 627, in get_db_prep_save 
    prepared=False) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\models\fields\__init__. 
py", line 907, in get_db_prep_value 
    value = self.get_prep_value(value) 
    File "C:\Users\RIK\Envs\la\lib\site-packages\django\db\models\fields\__init__. 
py", line 915, in get_prep_value 
    return int(value) 
TypeError: int() argument must be a string or a number, not 'datetime.datetime' 

这是模型代码部分:

我加入CollectionItem对象所有者场:

class CollectionItem (models.Model): 
    card = models.ForeignKey(Card) 
    golden = models.BooleanField(default=False) 
    count = models.IntegerField(default=0) 
    level = models.IntegerField(default=1) 
    owner = models.ForeignKey(User, related_name='collectionCards') 

    @property 
    def price(self): 
     return self.card.price 



class Collection (models.Model): 
    owner = models.ForeignKey(User, related_name='collections') 
    items = models.ManyToManyField(CollectionItem, through='CollectionCollector') 


class CollectionAdmin (admin.ModelAdmin): 
    fields = ['owner'] admin.site.register(Collection, CollectionAdmin) 

class CollectionCollector (models.Model): 
    item = models.ForeignKey(CollectionItem, related_name='collection_item') 
    collection = models.ForeignKey(Collection) 
+0

中找到类似的解决方案链接。这将有助于查看生成错误的代码。 – Joel 2015-01-04 10:44:57

+0

这只是命令行中的一个syncdb命令。所有的代码都在咆哮。现在我可以运行服务器。但是代码没有看到我早期添加的新字段,并且我不能同步数据库,因为此错误。 – 2015-01-04 10:48:16

+0

参数'value'是'datetime.datetime'类型,不能转换为'int',但是@Joel表示我们需要查看代码。 – 2015-01-04 10:48:47

回答

0

我想,你在给datetime.datetime.now()为默认值迁移,因为它要求你输入。

只需编辑迁移文件和更改日期时间默认值的字符串为这些字段的一个

count = models.IntegerField(default=0) 
level = models.IntegerField(default=1) 

然后运行迁移再次

+0

非常感谢。我在迁移hystory中发现了错误的日期时间默认值并对其进行了修复。 – 2015-01-04 11:15:58

0

我的脸在我的环境相同sitution,这里是解决方案是什么我需要: 删除db.sqlite3 删除所有迁移中的所有应用程序 然后重新运行注释文件

python manage.py makemigrations 
python manage.py migrate 

完成这些步骤后,再次出现错误。 我还在https://stackoverflow.com/a/34825277/6711680