python - 如何在不访问数据库的情况下创建带有延迟字段的 django 模型实例?

标签 python django

假设我知道数据库中存在 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/

相关文章:

python - 基于ManyToManyField的过滤 - 如果列表中存在项目则获取记录

python - 如何使用 Django 的 'with' 模板标签保存比较结果?

django - 如何在 Django 中编写请求过滤器/预处理器

python - Unix 目录结构的快速、逐行 "grep -n"等价物

Python os.walk 始终附加 root

python - 将 0-1 数字转换为 RGB 蓝色比例(Python)

python - 如何强制清理字段并在 Django 中重新显示它?

python - python-django框架中的内连接

python - FastAPI 和 Pydantic 的正确类型工厂

python - 使用不在索引中的元素切片 Pandas 系列