Django在查询集结果上添加附加字段[重复]

Posted

技术标签:

【中文标题】Django在查询集结果上添加附加字段[重复]【英文标题】:Django adding additional field on query set result [duplicate] 【发布时间】:2021-04-02 18:58:05 【问题描述】:

我的 Django 上有这些代码

    def get(self, request):
        movie = Movie.objects.all().order_by('name').first()
        serializer = MovieSerializer(movie)
        serializer_data = serializer.data
        return Response(serializer_data, status=status.HTTP_200_OK)

它会返回这个数据


    
      "description": "Haunted House Near You",
      "id": 1,
      "name": "Scary Night",
    ,
    
      "description": "Netflix and Chill",
      "id": 2,
      "name": "Movie Night",
    ,

我想添加自定义字段,像这样称为“别名”


    
      "description": "Haunted House Near You",
      "id": 1,
      "name": "Scary Night",
      "alias": "SN"
    ,
    
      "description": "Netflix and Chill",
      "id": 2,
      "name": "Movie Night",
      "alias": "MN"
    ,

我的问题是,如何在 Django 上使用 ORM 添加自定义字段?

【问题讨论】:

如果您在serializer_data 中获取 JSON 格式,则迭代并在其中添加一个字段。 【参考方案1】:

您可以使用 SerializerMethodField 轻松添加基于对象的字段。 默认情况下,它会在您的序列化程序中查找 get_NameOfField 方法。请注意,这是一个只读字段,我相信这是您要查找的内容。

这是一个示例,它给出了对象名称的每个单词的首字母。

# serializers.py

class YourSerializer(serializers.ModelSerializer):
    alias = serializers.SerializerMethodField()

    class Meta:
        # class meta stuff

    def get_alias(self, obj):
        return "".join([s[0] for s in obj.name.split()])

这比尝试在视图中使用附加查询要高效得多。

希望有所帮助。

【讨论】:

以上是关于Django在查询集结果上添加附加字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django:向 UserCreationForm 添加附加字段

如何向 Django QuerySet 添加附加列

BigQuery 将查询结果附加到具有必填字段的表中

如何在带注释的 Django 查询集结果上列出字段值?

如何链接 Django 查询集以保留单个顺序

更改列表页面上的 django admin 附加字段