如何创建带有延迟字段的django模型实例,而无需访问数据库?

时间:2019-01-16 11:22:15

标签: python django

说我知道数据库中存在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的实际年龄。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

django.db.models.DEFERRED分配给您要推迟的字段,即:

alice = Model(id=3, name='Alice', age=django.db.models.DEFERRED)

请注意,这仅适用于实例化,创建模型后无法分配DEFFERED

您显然不能推迟主键。