1

私は
ジャンゴ-RESTフレームワーク "GROUPBY" ModelSerializer

class MyModel(models.Model): 
    key = models.CharField(max_length=255) 
    value = models.TextField(max_length=255) 
    category = models.CharField(max_length=4) 
    mode = models.CharField(max_length=4) 

フィールドkeycategorymode次のような状況を持っているが一緒にユニークです。

{ 
    "key": "MODEL_KEY", 
    "category": "CAT_1" 
    "MODE_1": { "id": 1, "value": "1" } 
    "MODE_2": { "id": 2, "value": "2" } 
}, 
{ 
    "key": "MODEL_KEY", 
    "category": "CAT_2" 
    "MODE_1": { "id": 3, "value": "1" } 
    "MODE_2": { "id": 4, "value": "2" } 
} 

がこれを行うのいずれかの方法があります:

m1 = MyModel(key='MODEL_KEY', value='1', category='CAT_1' mode='MODE_1') 
    m2 = MyModel(key='MODEL_KEY', value='2', category='CAT_1' mode='MODE_2') 
    m3 = MyModel(key='MODEL_KEY', value='1', category='CAT_2' mode='MODE_1') 
    m4 = MyModel(key='MODEL_KEY', value='2', category='CAT_2' mode='MODE_2') 

が、私はそうシリアライズされたデータは、このようになりますkeycategoryによってグループ意志APIを公開したい:私は、次のオブジェクトを持っていますdjango restフレームワークではModelSerializerです。

# Postgres specific! 
from django.contrib.postgres.aggregates.general import ArrayAgg 

qs = MyModel.objects.group_by('key', 'category').annotate(
     mode_list=ArrayAgg('mode')).order_by(
     'key', 'category').distinct() 

あなたはその後、プロパティにアクセスすることができます:あなたのクエリセットを形成するために、上記を使用しhttps://github.com/kako-nawao/django-group-by

:グループDjangoのモデルにあなたを可能にし、まだ結果にクエリセットで動作するモジュールがあり

答えて

1

key,categoryおよびmode_listは、結果として得られるQuerySet項目の属性としてqs[0].mode_listのようになります。したがって、シリアライザではフィールドとして単に名前を付けることができます。

フィールドmodel_listフィールドには、SerializerMethodFieldのカスタムコードを使用してリストを変換する必要があります。

modeでグループ化したくない場合は、集計が必要です。

関連する問題