假设我知道数据库中存在 django 模型的一行的一些字段,但没有将它们封装在模型实例中。有没有什么简单的方法可以让我将它们包装在模型实例中,而无需执行额外的数据库查询,并以填充了这些字段但所有其他字段都延迟的实例结束?
所以说我有模型:
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 的实际年龄。
有什么想法吗?
最佳答案
将django.db.models.DEFERRED
分配给您想要推迟的字段,即:
alice = Model(id=3, name='Alice', age=django.db.models.DEFERRED)
请注意,这仅适用于实例化,创建模型后无法分配 DEFFERED
。
你显然不能推迟主键。
关于python - 如何在不访问数据库的情况下创建带有延迟字段的 django 模型实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54215988/