0
私は最近、Djangoの開発を開始しました.Django REST Frameworkとクラスベースのビューを使用してAPIを構築しています。 モデルを結合し、時間に基づいてそれらをソートし、テーブル名が付加されたAPIにフィールドのサブセットを返す方法を探しています。Django REST Framework - モデルのないシリアル化による表示
現在、私は次のようしている:
views.py
class RunLog(APIView):
"""
List log for a specific run sorted in reverse chronological order
"""
def get(self, request, run_id, format=None):
# Combine and sort based on time (decreasing)
result_list = sorted(chain(Output.objects.filter(run=run_id),
Downtime.objects.filter(run=run_id)),
key=attrgetter('start_time'), reverse=True)
// Replace this with serializer??
response = Response(serializers.serialize('json', result_list), status=status.HTTP_200_OK)
return response
models.py
class Output(models.Model):
start_time = models.DateTimeField(default=datetime.now)
value = models.FloatField()
run = models.ForeignKey(Run, blank=True, null=True)
def __unicode__(self):
return str(self.id)
class Downtime(models.Model):
start_time = models.DateTimeField(default=datetime.now)
end_time = models.DateTimeField(null=True, blank=True)
reason = models.CharField(max_length=500)
run = models.ForeignKey(Run, blank=True, null=True)
私は、次のJSONを取得する:
"[{\"model\": \"app.downtime\", \"pk\": 91, \"fields\": {\"start_time\": \"2016-07-20T14:46:21Z\", \"end_time\": null, \"reason\": \"reason1\", \"run\": 71}}, {\"model\": \"app.downtime\", \"pk\": 101, \"fields\": {\"start_time\": \"2016-07-20T14:46:21Z\", \"end_time\": null, \"reason\": \"reason2\", \"run\": 71}}]"
私は考え好きな次のようなJSON形式でこのデータをシリアル化するために:
[
{
"id": 231,
"type": "speed",
"description": "Some description",
"time": "2016-07-21T21:26:26Z"
}
]
**Where type is the database table and description is concatenated columns from a model.
私は運なしドキュメントとthis similar question見てきました。
あなたはModelObj._meta.db_table' '経由でDBのテーブル名にアクセスすることができます。 – IanAuld
私が気づいている最大の問題は、データのフォーマット方法です。 (values()を使用して)モデルからいくつかのフィールドを取り出し、それらを新しいフィールド名にプッシュし、さらにフィールドを追加して(ModelObj._meta.db_tableを介してtablename)、それをレスポンスとして送信することができます。 – Matt
'def your_serializer(obj):return dict(id = obj.id、type =" type "、...)'? – IanAuld