【问题标题】:How can i group by all data according to model in DRF?如何根据 DRF 中的模型对所有数据进行分组?
【发布时间】:2021-08-25 02:27:47
【问题描述】:

目前,我正在做一个 DFR 项目,该项目可以成功获取所有数据,但我需要对 json 数据进行一些修改。

这是代码

class PermissionSerializers(serializers.ModelSerializer):

class Meta:
    model = Permission
    fields = ['id', 'name', 'codename']

def to_representation(self, instance):
    return {
        'model': instance.content_type.name,
        'data' :{
            'id': instance.id,
            'name': instance.name,
            'codename': instance.codename,
        }
    }

我得到了这种 JSON 格式,

{
"next": "http://127.0.0.1:8000/en/ga/api-version/common/admin/permissions/?page=4",
"previous": "http://127.0.0.1:8000/en/ga/api-version/common/admin/permissions/?page=2",
"total": 33,
"page": 3,
"page_size": 10,
"results": [
    {
        "model": "user",
        "data": {
            "id": 25,
            "name": "Can add user",
            "codename": "add_user"
        }
    },
    {
        "model": "user",
        "data": {
            "id": 29,
            "name": "Admistrative Access",
            "codename": "admin_access"
        }
    },

但我想用这样的东西进行修改,上面有模型名称,然后是字典中的所有可用数据:

{
        "model": "user",
        "data": {
            "id": 26,
            "name": "Can change user",
            "codename": "change_user"
        },
        {
            "id": 25,
            "name": "Can add user",
            "codename": "add_user"
        },
    },






   

【问题讨论】:

  • 你能展示一下你的观点吗?
  • 这里是视图:class PermissionListView(ListAPIView):queryset = Permission.objects.all()serializer_class = PermissionSerializers
  • 在这种情况下,您必须在您的to_representation 中删除model,然后修改list api 视图的结果以执行以下操作:result = {'model': 'user', 'data': serializer.data}
  • 但在这种情况下,模型是动态的。而且每个模型都有自己的权限
  • 那么这个视图和序列化器使用了不同的模型?

标签: django django-models serialization django-rest-framework django-serializer


【解决方案1】:

你得到这样的东西是因为你的 API 中有分页,如果你不希望它只是禁用分页。

【讨论】:

    【解决方案2】:

    我想出了这个解决方案:

    def list(self, request):
        _models_list = [
            'organization','user','group', 'logentry', 'organizationtype',
            'keyword', 'productsupport','feedbacksupport','twittercredential']
        models = ContentType.objects.filter(model__in = _models_list)
        model_dict = {
            'model': '',
            'data':''
        }
        results = []
    
        for model in models:
            _permissions = []
            access = ' Access'
            if model.model == 'group':
                model_dict['model'] = 'Role'+ access
            elif model.model == 'organizationtype':
                model_dict['model'] = 'Organization Type'+ access
            elif model.model == 'productsupport':
                model_dict['model'] = 'Product'+ access
            elif model.model == 'feedbacksupport':
                model_dict['model'] = 'Feedback'+ access
            else:
                model_dict['model'] = model.model.capitalize()+ access
            permissions = Permission.objects.filter(content_type = model)
            for premission in permissions:
                _permissions.append(premission)
            
            serializer = PermissionSerializers(_permissions, many=True)
            data = serializer.data
            model_dict['data'] = data
            results.append(model_dict.copy())
            
        return Response(results)
    

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 2021-03-30
      • 1970-01-01
      • 2021-07-24
      • 2016-10-10
      相关资源
      最近更新 更多