擅长:python、mysql、java
<p>虽然最好使用<code>JSONField</code>来处理它,但是我将回答您的问题,因为它不是强制执行特定的DB后端。在</p>
<p>问题的根本原因是,每次在模型实例上调用<code>bar</code>时,都会创建并返回一个新字典,因此您的更改将丢失。在</p>
<p>您应该将创建的字典存储在属性中,以避免这种重新创建行为。在</p>
<pre><code>class foo(models.Model):
_bar = models.TextField()
def get_bar(self):
dict_value = getattr(self, '_bar_dict', None)
if not dict_value:
import json
dict_value = json.loads(self._bar)
setattr(self, '_bar_dict', dict_value)
return dict_value
def set_bar(self, new_bar):
import json
self._bar = json.dumps(new_bar)
self._bar_dict = dict(new_bar)
bar = property(get_bar, set_bar)
</code></pre>
<p>或者您可以使用<code>@cached_property</code>装饰器。[见<a href="https://stackoverflow.com/questions/4037481/caching-attributes-of-classes-in-python">1</a>和<a href="http://ericplumb.com/blog/understanding-djangos-cached_property-decorator.html" rel="nofollow noreferrer">2</a>]</p>