首页 > 解决方案 > Django (drf) 添加新参数/字段仅用于来自数据库的现有查询集(用于输出)的输出

问题描述

我正在做一个关于 drf 的项目,我需要从数据库中获取数据(以千计),并显示选择性字段作为响应。

模型.py

class TblDemo(models.Model):
    tbl_id = models.IntegerField()
    tbl_name = models.CharField(max_length=50)
    tbl_size = models.CharField(max_length=50)
    tbl_height = models.Charfield(max_length=50)
    tbl_material = models.Charfield(max_length=50)

    class Meta:
        managed = True
        db_table = 'tbl_demo'

视图.py

class data_fetch(viewsets.ViewSet):
    def tbl_list(self, request, format=None)
        serializer = Tbl_Serializer_input(data=request.data)
        if serializer.is_valid():
            queryset1 = tbl_name.objects.all()
            queryset2 = queryset1.filter(tbl_name=request.data.get("title"))
            serializer = Tbl_Serializer_output(queryset2, many=True)
            return Response(serializer.data)

序列化程序.py

class Tbl_Serializer_input(serializers.Serializer):
    title = serializers.CharField(required=True, max_length=50)
    refer_no = serializers.CharField(required=True, max_length=50)

class Tbl_Serializer_output(serializers.Serializer):
    tbl_id = serializers.CharField(max_length=50)
    tbl_name = serializers.CharField(max_length=50)
    tbl_size = serializers.CharField(max_length=50)
    tbl_height = serializers.Charfield(max_length=50)

输出

[
  {
    "tbl_id":"1", 
    "tbl_name":"white table",
    "tbl_size": "square",
    "tbl_height": "2 feet"
  },
  {
    "tbl_id":"2", 
    "tbl_name":"black table",
    "tbl_size": "square",
    "tbl_height": "3 feet"
  },
  .......and so on.

但是现在,要求是我不能更改数据库/模型,但需要添加更多字段,例如(“refer_no”、“material”和“density”,在每种情况下都是相同的)以及查询集中的每个对象,它不会存储在数据库中,但仅用于响应/输出。

因此,添加新参数后,我的输出将如下所示:其中,“refer_no”直接从输入中获取以显示输出字段。并且“材料”和“密度”不能添加到数据库中,只需要在中间进行硬编码。

新输出

[
  {
    "tbl_id":"1", 
    "refer_no":"abadadf",
    "tbl_name":"white table",
    "tbl_size": "square",
    "tbl_height": "2 feet",
    "density": "350gm/in"
    "material": "tek wood"
  },
  {
    "tbl_id":"2", 
    "refer_no":"abadadf",
    "tbl_name":"black table",
    "tbl_size": "square",
    "tbl_height": "3 feet",
    "density": "350gm/in",
    "material": "tek wood"
  },
  .......and so on.

我实际上已经从数据库中添加了带有查询集的新字段,但是当它进行序列化时,它显示了循环循环错误。

请帮忙。

标签: djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-serializer

解决方案


您可以使用该to_representation方法处理序列化程序内部的数据。

例如:


class ModelSerializer(serializers.ModelSerializer):

    ...

    def to_representation(self, instance):
        to_repr = super().to_representation(instance)
        # add here the "refer_no", "material" and "density" key-value per object
        return to_repr

推荐阅读