在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
答案 0 :(得分:0)
syncdb
在这里不起作用,因为你已经在数据库中创建了表,并且更改的模型字段(更改的字段)无法由syncdb
同步(这就是为什么字段名称是唯一的错误是存在的)。来自documentation:
syncdb只会为尚未使用的模型创建表 安装。它永远不会发出ALTER TABLE语句来匹配更改 安装后进入模型类。对模型类和。的更改 数据库模式通常涉及某种形式的歧义,并且在那些模式中 例如,Django必须猜测正确的变化。 存在关键数据在此过程中丢失的风险。
如果您对模型进行了更改并希望更改数据库 要匹配的表,使用sql命令显示新的SQL结构 并将其与您现有的表架构进行比较以计算出来 变化。
您必须使用migration
。您可以使用South迁移数据库