1. ホーム
  2. django

モデル内のリストフィールド?

2023-08-15 11:52:03

質問

私のモデルで、トリプレットのリストを持つフィールドが欲しい。 [[1, 3, 4], [4, 2, 6], [8, 12, 3], [3, 3, 9]] . このデータをデータベースに格納することができるフィールドはありますか?

どのように解決するのですか?

JSONを使用して文字列に変換し、文字列として保存することができます。

例えば

In [3]: json.dumps([[1, 3, 4], [4, 2, 6], [8, 12, 3], [3, 3, 9]])

Out[3]: '[[1, 3, 4], [4, 2, 6], [8, 12, 3], [3, 3, 9]]'

クラスにメソッドを追加することで、自動的に変換してくれるようになります。

import json


class Foobar(models.Model):
    foo = models.CharField(max_length=200)

    def set_foo(self, x):
        self.foo = json.dumps(x)

    def get_foo(self):
        return json.loads(self.foo)

Django 1.9 以降を使用していて、postgresql を使用している場合、JSONField という新しいクラスがあるので、それを代わりに使うべきです。 以下はそれへのリンクです

PostgreSQLのJSONと配列に関する良い話が、以下のサイトにあります。 youtube . 非常に良い情報があるので、見てみてください。