[英]django rest framework foreign key serializer issue
我是DJango Python Web服務的新手,我面臨着serializers.here的小問題。
**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"
}
]
}
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.