2010-05-25 79 views
2

在Django模型说,在细节这个模型中存在/ models.pyDjango的同步DB问题

class OccDetails(models.Model): 
     title = models.CharField(max_length = 255) 
     occ = models.ForeignKey(Occ) 

所以当同步数据库是由以下领域获得创建

后来到这两个字段的添加和同步DB是取得了新的领域犯规得到created.How这是要解决的,还有什么是auto_now =在下面

真正这些都是新领域

  created_date = models.DateTimeField(auto_now_add=True) 
     modified_date = models.DateTimeField(auto_now_add=True, auto_now=True) 

回答

7

syncdb为INSTALLED_APPS中尚未创建表的所有应用程序创建数据库表。

执行syncdb不会改变现有的表
syncdb只会造成对尚未安装的型号表。它将永远不会发出ALTER TABLE语句来匹配安装后对模型类所做的更改。对模型类和数据库模式的更改往往涉及某种形式的模糊性,在这些情况下,Django必须猜测正确的更改。在这个过程中,关键数据可能会丢失。

您可以

  • 问题手动ALTER TABLE命令
  • DROP TABLE特定表(会丢失数据),然后再次运行
  • 运行django-admin sqlclear执行syncdb获得SQL语句列表清除整个数据库并运行这些命令(将刷新数据库 - 你将失去所有现有的数据)或

DateField.auto_now:每次保存对象时自动将字段设置为NOW()。用于“上次修改”的时间戳。请注意,始终使用当前日期;这不仅是您可以覆盖的默认值。

因此,modified_date列会自动更新每次调用object.save()

+0

谢谢...................... – Hulk 2010-05-25 09:13:53

3

这是Django的一个共同的问题的时间。正如Amarghosh所说,syncdb无法修改现有表的模式。

South已经被创建来解决这个问题。

我确实推荐它。

+0

谢谢...................... – Hulk 2010-05-25 09:13:35