Как установить значение по умолчанию для целочисленного поля для id () в движке приложения? - PullRequest
0 голосов
/ 08 августа 2011

Можно ли установить значение по умолчанию для поля в модели данных для id () модели данных?

что-то вроде

class MyModel(db.Model):
    myID = db.IntegerProperty(default=self.id())
    desc = db.StringProperty()

Ответы [ 3 ]

3 голосов
/ 08 августа 2011

Вы не можете.Значение по умолчанию, которое вы устанавливаете в переменной класса, будет одинаковым для всех экземпляров, созданных после прочтения определения класса.Если бы self.id() действительно имело смысл в этом контексте (это не так; self не определено), вы бы получили что-то вроде идентификатора класса и присвоили бы его как значение по умолчанию для всех новых экземпляров.

Идентификатор фактически не присваивается сущности, пока он не будет записан в хранилище данных, поэтому в принципе вы не можете знать, что это такое во время создания экземпляра.Вы можете присвоить свойству id после того, как вы написали сущность, но вы почти наверняка не хотите этого делать.

0 голосов
/ 08 августа 2011

Я могу придумать несколько способов (создание подкласса db.Model и переопределение свойств, в которых хранится ключ, создание собственного класса свойств для переопределения default_value), но они заставляют меня чувствовать себя грязно и страдать от нескольких побочных эффектов.

Если бы у меня действительно было использование для чего-то подобного (и я действительно не могу думать об этом), я бы сделал специальный метод create для моей Модели и использовал бы его для предварительного выделенияидентификаторы до создания .

class BadModel(db.Model):
    my_id = db.IntegerProperty()

    @classmethod
    def create(model, **kwargs):
        id = db.allocate_ids(db.Key.from_path(model.kind(), 1),1)[0]
        kwargs['key'] = db.Key.from_path(model.kind(), id)
        kwargs['my_id'] = id
        return model(**kwargs)


>> e = BadModel.create()
>> e.my_id
2039
0 голосов
/ 08 августа 2011

Обратите внимание, что вы можете запросить по идентификатору, как это:

entity = MyModel.get_by_id(123)
entities = MyModel.get_by_id([123,456,789])

Хранение дополнительной копии идентификатора внутри сущности почти наверняка не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...