控制Django Rest框架的输出 [英] Control output of Django Rest Framework

查看:78
本文介绍了控制Django Rest框架的输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的REST API正常运行,但输出是所有的id号码。如何获取'role_type'来显示名称而不是ID号?



输出:

  {count:2,next :null,previous:null,results:[{user:{username:smithb,first_name:Bob,last_name:Smith},role_type 2,item:1},{user:{username:jjones,first_name:Jane,last_name:Jones},role_type:2,item 1}]} 

serializers.py

  class RoleSerializer(serializers.ModelSerializer):

user = PersonShortSerializer(many = False,read_only = True)

class Meta:
model = Role
fields ='user','role_type','item'

def get_role_type(self,obj):
return obj.name

models.py

  class Role(models.Model):
role_type = models.ForeignKey('RoleType')
user = models.ForeignKey(Person)
item = models.ForeignKey('Assets。 Item')

class RoleType(models.Mod el):
name = models.CharField(max_length = 255)
permissions = models.ManyToManyField(RolePermission,
blank = True,null = True)

def __unicode __(self):
return self.name


解决方案

p>查看不同类型的序列化器关系字段。



特别是 RelatedField 应该做你所需要的,因为它将使用其unicode值代表关系的目标。



$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
$ b class Meta:
model = Role
fields =('user','role_type','item')

另请注意 RelatedField 是一个只读字段,因为没有办法确定给定unicode表示的适当的模型实例。如果你确实需要它可写,你可能需要看一下实现一个自定义关系字段


My REST API is functioning correctly, but the output is all id numbers. How can I get 'role_type' to display the name instead of the ID number?

Output:

{"count": 2, "next": null, "previous": null, "results": [{"user": {"username": "smithb", "first_name": "Bob", "last_name": "Smith"}, "role_type": 2, "item": 1}, {"user": {"username": "jjones", "first_name": "Jane", "last_name": "Jones"}, "role_type": 2, "item": 1}]}

serializers.py

class RoleSerializer(serializers.ModelSerializer):

    user = PersonShortSerializer(many=False, read_only=True)

    class Meta:
        model = Role
        fields = 'user', 'role_type', 'item'

        def get_role_type(self, obj):
            return obj.name

models.py

class Role(models.Model):
    role_type = models.ForeignKey('RoleType')
    user = models.ForeignKey(Person)
    item = models.ForeignKey('Assets.Item')

class RoleType(models.Model):
    name = models.CharField(max_length=255)
    permissions = models.ManyToManyField(RolePermission,
                                         blank=True, null=True)

    def __unicode__(self):
        return self.name

解决方案

Take a look at the different types of serializer relationship fields.

In particular RelatedField should do what you need as it'll represent the target of the relationship using its unicode value.

class RoleSerializer(serializers.ModelSerializer):
    user = PersonShortSerializer(many=False, read_only=True)
    role_type = serializers.RelatedField()

    class Meta:
        model = Role
        fields = ('user', 'role_type', 'item')

Also note that RelatedField is a read only field, as there's no way to determine the appropriate model instance given the unicode representation. If you did need it to be writable you might want to look at implementing a custom relational field.

这篇关于控制Django Rest框架的输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆