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のように直接指定すれば、そのモデルのデータは表示できますが、
今後、アプリケーションを追加していきたいので、逆参照できるようにしたいと思っています。
よろしくお願いします。
あなたの回答
tips
プレビュー