2014-06-18 34 views
1

我的REST API運行正常,但輸出都是id號。我如何獲得'role_type'來顯示名稱而不是ID號碼?Django Rest框架的控制輸出

輸出:

{"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 

回答

0

看看不同類型的串行關係的字段。

特別是RelatedField應該做你所需要的,因爲它會使用它的unicode值代表關係的目標。

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

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

還要注意的是RelatedField是一個只讀字段,因爲沒有辦法確定給出的Unicode表示適當的模型實例。如果你確實需要它是可寫的,你可能需要考慮實現一個custom relational field