serializers serialize property fields example python django django-rest-framework django-serializer

python - serialize - json django example



El serializador de resto de Django devuelve una lista en lugar de json (1)

Tengo las siguientes etiquetas y publicaciones de objetos en una relación de muchos a muchos. Lo que trato de devolver en el serializador posterior es devolver las etiquetas en una lista (usando solo Tag.name) en lugar de json, ¿cuál es la forma limpia de hacer esto?

serializers.py

class TagSerializer(serializers.ModelSerializer): class Meta: model = Tag fields = (''name'', ''description'', ''date_created'', ''created_by'') class PostSerializer(serializers.ModelSerializer): tags = TagSerializer(read_only=True, many=True) class Meta: model = Post fields = (''post_id'', ''post_link'', ''tags'')

Actualmente, PostSerializer devuelve etiquetas en formato json con todos los campos, solo quiero que devuelva etiquetas: [''tag1'', ''tag2'', ''tag3''] en una lista de cadenas.


Una forma de hacer esto es:

class PostSerializer(serializers.ModelSerializer): tags = serializers.SerializerMethodField() class Meta: model = Post fields = (''post_id'', ''post_link'', ''tags'') def get_tags(self, post): return post.tags.values_list(''name'', flat=True)

La segunda forma es con una propiedad en el modelo de publicación:

class Post(models.Model): .... @property def tag_names(self): return self.tags.values_list(''name'', flat=True) class PostSerializer(serializers.ModelSerializer): tag_names = serializers.ReadOnlyField() class Meta: model = Post fields = (''post_id'', ''post_link'', ''tag_names'')