python 2.7 - Django-REST-Framework "GroupBy" ModelSerializer -
i have following situation
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)   the fields key, category , mode unique together. have following objects:
    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')   i want expose api group key , category serialized data this:
{     "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" } }   is there way of doing in django rest framework modelserializer.
there module allows group django models , still work queryset in result: https://github.com/kako-nawao/django-group-by
using above form queryset:
# postgres specific! django.contrib.postgres.aggregates.general import arrayagg  qs = mymodel.objects.group_by('key', 'category').annotate(         mode_list=arrayagg('mode')).order_by(         'key', 'category').distinct()   you can access properties key, category , mode_list on resulting queryset items attributes qs[0].mode_list. therefore, in serializer can name them fields.
the model_list field might require serializermethodfield custom code transform list.
note need aggregation if don't want group mode, well.
Comments
Post a Comment