【发布时间】:2011-01-13 01:34:23
【问题描述】:
我有一个 Django 模型:
@staticmethod
def getdefault():
print "getdefault called"
return cPickle.dumps(set())
_applies_to = models.TextField(db_index=True, default=getdefault)
由于某种原因,从未调用过getdefault(),即使我构造了此模型的实例并将它们保存到数据库中。这似乎与 Django documentation 相矛盾:
Field.default
默认值 场。这可以是一个值或一个 可调用对象。如果可调用,它将 每次有新对象时调用 已创建。
我做错了吗?
更新:
本来我有这个,后来换到上面的版本调试:
_applies_to = models.TextField(db_index=True, default=cPickle.dumps(set()))
我不知道为什么那行不通。
更新 2:我仍然对此有困难。这是我的模型:
class Threshold(models.Model):
# ...
_applies_to = models.TextField(db_index=True, default=lambda: cPickle.dumps(set()))
还有一个测试:
def setUp(self):
self.threshold = Threshold()
self.threshold.save()
def test_default_applies_to(self):
self.assertEqual(self.threshold._applies_to, cPickle.dumps(set()))
此测试失败。我不知道为什么。
FAIL: test_default_applies_to (apps.threshold.tests.ThresholdTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "tests.py", line 27, in test_default_applies_to
self.assertEqual(self.threshold._applies_to, cPickle.dumps(set()))
AssertionError: 'N.' != 'c__builtin__\nset\np1\n((ltRp2\n.'
为什么会发生这种情况?也许我不明白default 应该如何工作。
【问题讨论】: