У меня есть модель Django:
@staticmethod
def getdefault():
print "getdefault called"
return cPickle.dumps(set())
_applies_to = models.TextField(db_index=True, default=getdefault)
По какой-то причине getdefault()
никогда не вызывается, даже когда я создаю экземпляры этой модели и сохраняю их в базе данных. Кажется, это противоречит документации Django :
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
должен работать.