2015-01-04 27 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