簡體   English   中英

django rest框架外鍵序列化器問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM