【问题标题】:Django Rest Framework - Add fields to JSONDjango Rest Framework - 向 JSON 添加字段
【发布时间】:2014-10-30 20:21:14
【问题描述】:

现在我返回一个带有模型字段及其值的 JSON 文件。我想向模型中不存在的 JSON 添加一些额外的字段(我想添加一个新字段,指定用户是否可以根据视图的权限修改诊断)。我该怎么做?

models.py

class Diagnostic(models.Model):
    Center = models.TextField(blank=True)
    Author = models.TextField(blank=True)
    Email = models.EmailField(blank=True)
    Date = models.DateField(null = True, blank=True)

views.py

class DiagnosticViewSet(viewset.ModelViewSet):
    model = Diagnostic
    permission_classes = [GroupPermission]

序列化器.py

class DiagnosticSerializer(serializers.ModelSerializer):
    class Meta:
        model = Diagnostic

【问题讨论】:

    标签: json django django-rest-framework


    【解决方案1】:

    将此添加到您的视图中

     def list(self, request, *args, **kwargs):
        response = super(Classname, self).list(request, *args, **kwargs)
        try:
            response.data['permission'] = 'give your permission'
        except:
            pass
        return response
    

    【讨论】:

    • 我已经尝试过代码并且工作正常,但不完全正确。如果我在 localhost/diagnostics 中执行 GET 可以完美运行,但是如果我在 localhost/diagnostics/1 中执行 GET,则不会出现 JSON 中的权限字段。
    【解决方案2】:

    您将它们添加到序列化程序中。

    class DiagnosticSerializer(serializers.ModelSerializer):
        auth_status = serializers.SerializerMethodField('get_auth_status')
        class Meta:
            model = Diagnostic
    
        def get_auth_status(self, obj):
            if obj.has_auth():
                return True
            return False
    

    【讨论】:

      【解决方案3】:

      您必须为 url localhost/diagnostics/1 使用以下代码

       from rest_framework.response import Response
      
       def retrieve(self, request, *args, **kwargs):
          self.object = self.get_object()
          serializer = self.get_serializer(self.object)
          data = serializer.data
          data['permission'] = 'give your permission'
          return Response(data)
      

      【讨论】:

      • 完美运行。谢谢!