2014-12-05 58 views
1

我试图创建一个名为'store'的django应用程序,但是当我执行./manage.py makemigration store,然后./manage.py migrate store迁移在phpmyadmin中查看此表时正确应用,它只有一个字段。Django迁移创建只有一个字段的表

我的模型代码如下:

from django.db import models 

class Module(models.Model): 
    class Meta: 
     verbose_name = "Module" 
     verbose_name_plural = "Modules" 

    def __unicode__(self): 
     return self.name 

    def __str__(self): 
     return self.name 

    name = models.CharField(max_length=100, required=True) 
    version = models.CharField(max_length=10,default='0.1') 
    description = models.CharField(max_length=500,default="No description") 

./manage.py sqlmigrate store结果是:

BEGIN; 
CREATE TABLE `store_module` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY); 

COMMIT; 

我关于Python 2.7和MySQL数据库的Django 1.7使用。

+0

朋友,好像字段声明不是你模型的一部分。检查你的身份。如果它仍然不起作用,请附上你正在使用的IDE模型类的截图....谢谢 – 2014-12-05 18:03:45

+0

if你的意思是我在写这个问题时手动修复了它的缩进,谢谢你通知我。 或你的意思是宣布他们: 'self.name = CharField()' ??请解释。 – 2014-12-05 18:06:43

+0

在这里看看代码似乎绝对fine.But仍然(纠正我,如果我错了)看起来你的领域不是模型class.and的一部分,这就是为什么Django不把他们在migrations.It可能是其中一个原因但如果仍然不友好地附上你的模型类的截图。 – 2014-12-05 18:10:19

回答

0

我找到了答案多次试验后,该问题是:

You are trying to add a non-nullable field 'name' to module without a default; we can't do that (the database needs something to populate existing rows). 
Please select a fix: 
1) Provide a one-off default now (will be set on all existing rows) 
2) Quit, and let me add a default in models.py 
Select an option: 

,所以我说默认参数为空字符串和 解决。

0

名称= models.CharField(MAX_LENGTH = 100,需要=真)

正如我可以看到,这字段是一个模型字段,而不是一个表单字段。所以,需要= True在这种情况下不起作用。相反,使用下面的文档中指定的blank = false。

You should use this

希望这可以issue.Please让我知道在评论任何其他解释的可能性。

+0

不幸的是,结果相同。 python本身允许关键字参数。在这旁边不是解释者问题。 – 2014-12-06 14:28:15