У меня есть несколько столбцов TextField в моем объекте UserProfile, которые содержат объекты JSON. Я также определил свойство setter / getter для каждого столбца, который инкапсулирует логику для сериализации и десериализации JSON в структуры данных Python.
Характер этих данных гарантирует, что к ним будет многократно обращаться по логике представления и шаблона в рамках одного запроса. Чтобы сэкономить на затратах на десериализацию, я бы хотел запомнить структуры данных python при чтении, аннулировании при прямой записи в свойство или при сохранении сигнала от объекта модели.
Где / Как хранить заметку? Я нервничаю по поводу использования переменных экземпляра, так как я не понимаю магию, лежащую в основе того, как конкретный UserProfile создается запросом. Безопасно ли использовать __init__
или мне нужно проверять наличие атрибута memo с помощью hasattr()
при каждом чтении?
Вот пример моей текущей реализации:
class UserProfile(Model):
text_json = models.TextField(default=text_defaults)
@property
def text(self):
if not hasattr(self, "text_memo"):
self.text_memo = None
self.text_memo = self.text_memo or simplejson.loads(self.text_json)
return self.text_memo
@text.setter
def text(self, value=None):
self.text_memo = None
self.text_json = simplejson.dumps(value)