【问题标题】:Django (drf) add new parameters/fields only for output with existing queryset(used for output) from databaseDjango (drf) 添加新参数/字段仅用于来自数据库的现有查询集(用于输出)的输出
【发布时间】:2021-11-08 22:50:29
【问题描述】:

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

models.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'

views.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.

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

请帮忙。

【问题讨论】:

  • 你在序列化器中试过ReadOnlyField
  • 我认为你需要this。在这种方法中,您可以访问self.request,因此您可以访问输入数据。

标签: django django-models django-rest-framework django-views django-serializer


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2018-12-11
    • 1970-01-01
    • 2014-08-25
    • 2018-09-25
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多