说我知道数据库中存在django Model行的某些字段,但没有将它们封装在Model实例中。对于我来说,是否有任何简便的方法可以将它们包装在Model实例中,而无需执行额外的数据库查询,并以填充了这些字段但所有其他字段都被延迟的实例结束呢?
所以说我有模特:
from django.db.models import CharField, IntegerField, Model
class Person(Model):
name = CharField(max_length=20)
age = IntegerField(default=10)
我有字典:
raw_person = {'id': 3, 'name': 'Alice'}
我想以模型实例结尾,而无需其他数据库查询:
alice = Model(id=3, name='Alice', age=<deferred>)
这样做:
alice.name
是即时的,但是
alice.age
需要再次查询数据库以获取alice
的年龄。
很明显(?)我不能只是做:
alice = Model(id=3, name='Alice')
因为这将设置age = 10
,因为这是该字段的默认设置,但这可能不是Alice的实际年龄。
有什么想法吗?
答案 0 :(得分:3)
将django.db.models.DEFERRED
分配给您要推迟的字段,即:
alice = Model(id=3, name='Alice', age=django.db.models.DEFERRED)
请注意,这仅适用于实例化,创建模型后无法分配DEFFERED
。
您显然不能推迟主键。