【发布时间】:2011-11-10 00:46:38
【问题描述】:
我在 Django 中有一个非常基本的模型:
class Case(models.Model):
name = models.CharField(max_length=255)
created_at = models.DateTimeField(default=datetime.now)
updated_at = models.DateTimeField(default=datetime.now)
def save(self):
if self.created_at == None:
self.created_at = datetime.now()
self.updated_at = datetime.now()
super(Case, self).save()
class Meta:
db_table = u'cases'
因为我没有指定 PK,所以 Django 为我解决了这个问题。我在我的数据库中看到名为“id”的字段,标记为主键和自动增量。我发现收到这个警告很奇怪,因为数据库和模型端的一切都很酷。错误是:
_mysql_exceptions.Warning
Warning: Field 'id' doesn't have a default value
保存时我的解决方法是将 id 设置为 0。它会终止警告,并且 id 会正确设置,因为 MySQL 会处理它。
case = Case()
case.id = 0 #ugly workaround for - Warning: Field 'id' doesn't have a default value
case.name = request.POST[u'case[name]']
case.save()
这个解决方案的问题是:
- 太丑了
- 保存后新的 PK 无法访问,这使得它 无法正确序列化
有谁知道如何解决这个问题?
我在跑步:
Python 2.7.2
django.VERSION (1, 3, 1, 'final', 0)
mysql Ver 14.14 Distrib 5.1.45, for apple-darwin10.2.0 (i386) using readline 5.1
MySQL_python-1.2.3-py2.7-macosx-10.4-x86_64.egg
我的创建表如下所示:
CREATE TABLE `cases` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=45 DEFAULT CHARSET=latin1
【问题讨论】:
-
您使用的是什么版本? Python、django、mysql、mysql驱动?另外,你能把mysql“show create table yourappname_cases;”的结果贴出来吗?
-
好主意。添加到问题的详细信息