我是DJango Python webservices的新手,我遇到了序列化器的小问题。这是我的代码。
**views.py**
@csrf_exempt
@api_view(['GET'])
def sqlservice(request):
if request.method == 'GET':
posts = tbl_dcs.objects.all()
for each in posts:
manid = each.managerid_id
manname = Managerid.objects.get(id = manid)
nameser = managerSerializer(manname,many=False)
print nameser.data
serializer = PostSerializer(posts, many=True)
return Response({"resource":serializer.data})
**models.py**
from __future__ import unicode_literals
from django.db import models
class Managerid(models.Model):
managername = models.CharField(max_length=25)
def __unicode__(self):
return self.managername
class tbl_dcs(models.Model):
name = models.CharField(max_length=25)
location = models.CharField(max_length=50)
address = models.TextField()
managerid = models.ForeignKey(Managerid,related_name='items')
phonenumber = models.IntegerField()
def __unicode__(self):
return self.name
**serilizer.py**
from rest_framework import serializers
from mysqlservice.models import tbl_dcs
from mysqlservice.models import Managerid
class managerSerializer(serializers.ModelSerializer):
class Meta:
model = Managerid
fields = ('id', 'managername')
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = tbl_dcs
fields = ('id', 'name','location','address','managerid','phonenumber')
如果我运行上面的代码,结果就是......
{
"resource": [
{
"id": 1,
"name": "ramesh",
"location": "hyd",
"address": "kphb,hyd",
"managerid": 10,
"phonenumber": 345345
},
{
"id": 2,
"name": "kpti",
"location": "kphb",
"address": "kphb,6th phase,hyd",
"managerid": 10,
"phonenumber": 45456
}
]
}
我生成的json我无法获取managername。如何从不同的表中获取基于managerid的managername?。如果我在任何地方错了,请纠正我。 我最后的json应该如下......
{
"resource": [
{
"id": 1,
"name": "ramesh",
"location": "hyd",
"address": "kphb,hyd",
"managerid": 10,
"phonenumber": 345345,
"managername":"xxxxx"
},
{
"id": 2,
"name": "kpti",
"location": "kphb",
"address": "kphb,6th phase,hyd",
"managerid": 10,
"phonenumber": 45456,
"managername":"yyyyy"
}
]
}
答案 0 :(得分:0)
使用serializers.SerializerMethodField
获取经理名称,如下所示..
class PostSerializer(serializers.ModelSerializer):
managername = serializers.SerializerMethodField('get_manager_name')
class Meta:
model = tbl_dcs
fields = ('id', 'name','location','address','managerid','phonenumber','managername')
def get_manager_name(self, obj):
return obj.managerid.managername