6

JsonField フィールドを使用する Django モデルがあります。

ある時点で、フィールドを IP アドレスで更新し、そのフィールドを保存します。

class Agent(models.Model):
    properties = jsonfield.JSONField(default = {})

def save_ip_address(self, ip_address):
    self.properties['ip'] = ip_address
    self.save()

かなりまっすぐに見えます..そうではありませんか?

しかし、フィールドは ip ディクショナリ項目で保存されませんでした...そして私には理由がわかりません!

機能するが、コードで見栄えがよくない回避策を実行しました。

d = self.properties
d['ip'] = ip_address
self.properties = d 
self.save()

このようにして、JsonField は実際に IP アドレスとともにデータベースに保存されます。

最初のアプローチがうまくいかなかった理由を知っている人はいますか? それを修正するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

2

あなたの例は、私が試したときにうまくいきました。フィールドが保存されなかったという意味について詳しく説明していただけますか? 明確にするために、コンソールでテストしています。モデルを含むアプリを作成し、django コンソールを開いて実行しました。

>>> from test_app.models import Agent
>>> a = Agent()
>>> a.properties = {"host": "test"}
>>> a.save()
>>> a.properties
{'host': 'test'}
>>> a.save_ip_address("127.0.0.1")
>>> a.properties
{'ip': '127.0.0.1', 'host': 'test'}

これらの手順を同じ効果で再現できますか? もしそうなら、バグはあなたのコードのどこかにあります。

于 2013-08-21T15:03:46.890 に答える