2016-12-06 92 views
1

再说说我的串行器看起来像这样Django的REST框架序列化模型返回其STR表示

class EntitySerializer(serializers.ModelSerializer): 
    entity_instance = EntityInstanceSerializer(many=True) 
    tags = EntityTagSerializer(many=True) 

    class Meta: 
     model = Entity 
     fields = ('id', 'entity_instance', 'tags', 'note', 'source') 

class EntityTagSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = EntityTagLabel 
     fields = ('entity_tag_label',) 

我的标签模型是这样的:

class EntityTag(models.Model): 
    entity_tag_label = models.CharField(max_length=255, unique=True) 

    def __str__(self): 
     return self.entity_tag_label 

现在,这是好的,所有的,但我的回复如下所示:

... 
     "tags": [ 
      { 
       "entity_tag_label": "SENDER" 
      } 
     ], 

是否有可能为我的标记序列化程序简单地返回字符串r每个标签的介绍?这样,我只想有

 "tags": [ 
      "Sender", 
     ], 

为例

回答

2

可以使用SlugRelatedField做到这一点。例如:

class EntitySerializer(serializers.ModelSerializer): 
    entity_instance = EntityInstanceSerializer(many=True) 
    tags = serializers.SlugRelatedField(
     slug_field='entity_tag_label', 
     many=True, 
     read_only=True 
    ) 

    class Meta: 
     model = Entity 
     fields = ('id', 'entity_instance', 'tags', 'note', 'source') 
+0

啊!非常好,谢谢。出于好奇,是否有可能让slugfield进行关系查询?类似于像Entity.objects.filter(entity_instance__label ='somelable')这样的查询 –

+0

不知道我是否正确理解你的问题。但是,如果你的意思是基于标签过滤实体,那么不,你不能用SlugRelatedField来实现。序列化程序的目的不是过滤你的查询集。您可以阅读关于DRF中的过滤[here](http://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters) –