質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3045閲覧

JsonFieldに辞書型変数を代入したい

shirasu10fish

総合スコア35

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/07/30 23:43

#実現したいこと
次のようなmodel.pyがあるとき、

python

1from django.contrib.postgres.fields import JSONField 2from django.db import models 3 4class Dog(models.Model): 5 name = models.CharField(max_length=200) 6 data = JSONField() 7 8 def __str__(self): 9 return self.name

次のようなview.pyがあります。(いずれもこのページより引用。ただし一部改変。)

python

1Dog.objects.create(name='Rufus', data={ 2 'breed': 'labrador', 3 'owner': { 4 'name': 'Bob', 5 'petname': 'Fishy', 6 }], 7 }, 8})

この場合に、view.pyを次のようにしたいと考えています。(上と同じ結果を得られること期待しています)

python

1owner = {} 2 3ownername = 'Bob' #実際には色々処理してownernameを導き出す。 4owner.update({'ownername' : ownername}) 5 6petname = 'Fishy'#実際には色々処理してFishyを導き出す。 7owner.update({'petname' : petname}) 8 9Dog.objects.create(name='Rufus', data={ 10 'breed': 'labrador', 11 'owner': owner 12 , 13 }, 14})

しかし、結果として次のエラーが発生します

Error binding parameter 2 - probably unsupported type.

どうすれば上手く動くようになるでしょうか。

#環境情報
Django2.0.7
Python3.6.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご自身で貼り付けた、参考リンクにも書いてあるとおり、この JSONField は 「PostgreSQL」 というデータベースでしか使えません。

PostgreSQL specific model fields
https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/fields/

推測でしかありませんが、エラーメッセージを見る限り、データベースに「sqlite3」 を利用されているように見えます。

投稿2018/07/31 02:36

編集2018/07/31 03:14
tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shirasu10fish

2018/07/31 22:16

ご指摘の通り、sqlite3を使っていました。 完全に見落としていました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問