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

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

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

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

Python 3.x

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

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

2115閲覧

Django REST frameworkでネスト構造のJSONデータを作成する方法

donadona

総合スコア19

Django

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

Python 3.x

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

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/04/17 02:22

編集2019/04/17 02:28

Python3.7, Django2.1

Djangoで以下のような構造のAPI(JSON)データを作成したいのですが、やり方が分かりませんでした。
一般的にありそうなものだと思うのですが。

[ { "id":1, "app_name": "app1", "name": "観測1", "items":[ {"id": 1, "date": 2018-4-1, "obs1": 10.5, "obs2": 20.1 }, {"id": 2, "date": 2018-4-2, "obs1": 10.5, "obs2": 20.1 }, {"id": 3, "date": 2018-4-3, "obs1": 10.5, "obs2": 20.1 }, ... 以下略 ] }, { "id":2, "app_name": "app2", "name": "観測2", "items":[ {"id": 1, "date": 2019-3-11, "obs3": 31, }, {"id": 2, "date": 2019-3-12, "obs3": 32, }, {"id": 3, "date": 2019-3-15, "obs3": 30, }, ... 以下略 ] }, 以下、随時アプリケーションを追加予定 ]

現在のモデルは以下のようになっています。

mastermodel/models.py

class MasterModels(models.Model): app_name = models.CharField( max_length = 20, ) name = models.CharField( max_length = 100, )

app1/models.py

class App1Models(models.Model): parent = models.ForeignKey( MasterModels, on_delete = models.CASCADE, related_name = 'app1', ) obs1 = models.FloatField() obs2 = models.FloatField()

app2/models.py

class App2Models(models.Model): parent = models.ForeignKey( MasterModels, on_delete = models.CASCADE, related_name = 'app1', ) obs3 = models.IntegerField()

これで、例えば
https://domain/api/mastermodel/
にアクセスした際に、冒頭のJSONデータを表示したいのですが。

以下のようにして、App1からマスターモデルの情報を表示することはできました。
(https://domain/api/app1/からはマスターデータの情報表示はOK)

app1/serializer.py

class RecordSerializer(serializers.ModelSerializer): parent = MasterModelsSerializer() class Meta: model = App1Models fields = '__all__'

しかしながら、mastermodel側のコードの書き方が分かりません。

mastermodel/serializer.py

class MasterModelSerializer(serializers.ModelSerializer): items = ????? app1, app2, ...のデータを逆参照?? class Meta: model = MonitoringModels fields = ('url', 'id','app_name', 'name', 'items')

items=app1serializerのように直接指定すれば、そのモデルのデータは表示できますが、
今後、アプリケーションを追加していきたいので、逆参照できるようにしたいと思っています。

よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問