Django:我怎么知道是否需要字段值?

时间:2014-07-03 18:53:17

标签: django forms sqlite

category模型中,出于测试原因,我将name的字段属性设置为unique=False,然后调用./manage.py syncdb。 然后我提交一个表单,其中此属性的字段为空(请注意我设置required=False)。由于此表单已经提交一次而且字段name没有任何价值,因此数据库中已存在category没有name的内容(我在{{1}中看到它})我得到了错误

  

列名称不唯一

SQLite要求列名必须是唯一的吗?这是否意味着每个必填字段必须在提交时具有值(或者至少是默认值)?

修改

型号:

  

类别类别(models.Model):

admin

的ModelForm:

 name  = models.CharField(max_length=128, unique=False)
 views = models.IntegerField(default=0)
 likes = models.IntegerField(default=0)

 def __unicode__(self):
     return self.name

1 个答案:

答案 0 :(得分:0)

syncdb在这里不起作用,因为你已经在数据库中创建了表,并且更改的模型字段(更改的字段)无法由syncdb同步(这就是为什么字段名称是唯一的错误是存在的)。来自documentation

  

syncdb只会为尚未使用的模型创建表   安装。它永远不会发出ALTER TABLE语句来匹配更改   安装后进入模型类。对模型类和。的更改   数据库模式通常涉及某种形式的歧义,并且在那些模式中   例如,Django必须猜测正确的变化。   存在关键数据在此过程中丢失的风险。

     

如果您对模型进行了更改并希望更改数据库   要匹配的表,使用sql命令显示新的SQL结构   并将其与您现有的表架构进行比较以计算出来   变化。

您必须使用migration。您可以使用South迁移数据库