У меня есть модель Django:по умолчанию атрибут модели поля в Django
@staticmethod
def getdefault():
print "getdefault called"
return cPickle.dumps(set())
_applies_to = models.TextField(db_index=True, default=getdefault)
По какой-то причине, getdefault()
никогда не вызывается, как я построить экземпляры этой модели и сохранить их в базу данных. Это, кажется, противоречит Джанго documentation:
Field.default
Значение по умолчанию для поля. Это может быть значение или вызываемый объект. Если вызывается, он будет вызываться каждый раз, когда создается новый объект .
Я делаю что-то неправильно?
Update:
Изначально я был, но потом я перешел на выше версии для отладки:
_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
.
, что дает ошибку, что 'MyModel не defined' –
@Rosarch: Вы должны поставить имя вашей модели, я назвал __MyModel__ просто как пример :) – mouad
@Rosarch : я только что отредактировал мой ответ, извините за это, теперь я тестировал и это работает, надеюсь, что это может помочь :) – mouad