是否可以将数据模型中字段的默认值设置为数据模型的id()?
类似
class MyModel(db.Model):
myID = db.IntegerProperty(default=self.id())
desc = db.StringProperty()
答案 0 :(得分:3)
你做不到。您在那里设置的默认值是在一个类变量中,对于读取类定义后创建的所有实例都是相同的。如果self.id()
在这种情况下实际上有意义(它没有; self
未定义),你将得到类似于类的id,并将其指定为所有新实例的默认值。
在将id写入数据存储区之前,id实际上并未分配给实体,因此原则上您不能知道实例化时它是什么。您可以在编写实体后将属性设置为id ,但无论如何,您几乎肯定不想这样做。
答案 1 :(得分:0)
请注意,您可以按ID查询:
entity = MyModel.get_by_id(123)
entities = MyModel.get_by_id([123,456,789])
在实体内部存储额外的ID副本几乎肯定是不必要的。
答案 2 :(得分:0)
我可以想到几种方法(子类化db.Model并覆盖保存键的属性,创建一个自定义属性类来覆盖default_value)但是它们让我觉得很脏并且有一些副作用。
如果我确实对这样的东西有用(而且我真的想不到一个),我会为我的模型制作一个特殊的create
方法并使用它来预先分配创建之前的ID 。
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