Django 如何在从数据库加载数据后立即执行某些操作?
从数据库加载数据后,执行操作(例如从表单字段解析JSON或YAML)的最佳方式是什么 我的用例是:我有一个名为Django 如何在从数据库加载数据后立即执行某些操作?,django,django-models,yaml,Django,Django Models,Yaml,从数据库加载数据后,执行操作(例如从表单字段解析JSON或YAML)的最佳方式是什么 我的用例是:我有一个名为Puzzle的模型,其中包含一些字段和一个data字段,其中包含YAML(也可以是JSON,没关系)。在下面的代码中,每当我想从该YAML访问属性时,我都会运行YAML解析器并获取该信息 # models.py import yaml class Puzzle(models.Model): name = models.CharField(max_length=100, blan
Puzzle
的模型,其中包含一些字段和一个data
字段,其中包含YAML(也可以是JSON,没关系)。在下面的代码中,每当我想从该YAML访问属性时,我都会运行YAML解析器并获取该信息
# models.py
import yaml
class Puzzle(models.Model):
name = models.CharField(max_length=100, blank=True)
data = models.TextField()
def load_data(self):
return yaml.load(self.data)
@property
def coords(self):
d = self.load_data()
return d['coords']
@property
def clues(self):
d = self.load_data()
return d['clues']
示例YAML
coords: [[0, 0], [1, 1], [6, 8]]
clues:
- Clue #1
- Another Clue
# more fields, with arrays, dictionaries, etc
每次调用属性时运行解析器都是浪费
一个可能的解决方案是做一个简单的缓存:查看YAML之前是否已被解析,如果没有,则将其存储在某个字段中,稍后再使用。这将引入在每个属性方法中复制/粘贴的额外代码
当从数据库查询数据时,我希望只运行一次解析器。在我的模型中重写\uuuuu init\uuuuu
可能会起作用,但我不确定这是否会破坏某些东西。
我已经检查了,但是我不确定它是否只解析一次YAML数据。而且,它似乎与Django 1.7上的新迁移不兼容
谢谢