Rename response fields django rest framework serializer
<p>I'm calling a simple get API using djangorestframework. My Model is </p>

<pre><code>class Category(models.Model):
    category_id = models.AutoField(primary_key=True)
    category_name = models.CharField("Category Name", max_length = 30)
    category_created_date = models.DateField(auto_now = True, auto_now_add=False)
    category_updated_date = models.DateField(auto_now = True, auto_now_add=False)

    def __str__(self):
        return self.category_name
</code></pre>

<p>serializer.py</p>

<pre><code>class CategorySerializer(serializers.ModelSerializer) :
    class Meta:
        model = Category
        fields = ['category_id', 'category_name']

def category_list(request):
    if request.method == 'GET':
        categories = Category.objects.all()
        serializer = CategorySerializer(categories, many=True)
        return Response(serializer.data)
</code></pre>

<p>It's working fine when i hit request on the URL and returning following response.</p>

<pre><code>[
    {
        "category_id": 1,
        "category_name": "ABC"
    }
]
</code></pre>

<p>i want to change the response field names as it's for my DB only and don't want to disclose in response. If i change the name in serializer class than it's giving no field match error.</p>

<p>Also i want to customise other params like above response in response object with message and status like below.</p>

<pre><code>{
status : 200,
message : "Category List",
response : [
        {
            "id": 1,
            "name": "ABC"
        }
    ]
}
</code></pre>

<p>Need a proper guide and flow. Experts help.</p>

<p>You can just wrap it up in <code>json</code>. This is the way you render the way you want:</p>

<pre><code>from django.http import HttpResponse
import json

def category_list(request):
    if request.method == 'GET':
        categories = Category.objects.all()
        serializer = CategorySerializer(categories, many=True)
        response = {'code: 200, 'message': 'Category List', 'response': serializer.data}
        return HttpResponse(json.dumps(response), mimetype='application/json')
</code></pre>

<p>This is the way you can rename your fields:</p>

<pre><code>class CategorySerializer(serializers.ModelSerializer):
    name = serializers.CharField(source='category_name')

    class Meta:
        model = Category
        fields = ['category_id', 'name']
</code></pre>

<p>This is the <a href="http://www.django-rest-framework.org/api-guide/serializers/#specifying-fields-explicitly" rel="nofollow">docs</a> for serializing with different names.</p>

python django django-rest-framework jsonserializer