django - 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.
我实际上已经从数据库中添加了带有查询集的新字段,但是当它进行序列化时,它显示了循环循环错误。
请帮忙。
解决方案
您可以使用该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
推荐阅读
- vb.net - 从 vsto 插件获取定期会议信息
- php - 当 php 从 7.2.1 更改为 7.1.12 时查询返回不同的表
- javascript - 如何在新行 TinyMCE 上保留格式
- java - Java 在未来某个时间运行事件
- primefaces - Primefaces jqplot条形图自定义工具提示-百分比值
- amazon-web-services - 如何在 DynamoDB 中处理最终一致的读取
- itext - itext 7 相当于 itext5 中的 getUnderContent 是什么?
- hyperledger-fabric - 当我尝试以参与者身份登录我的业务网络以访问该交易记录时,我遇到了以下错误:
- dynamics-crm - 如何选择 Dynamics CRM 参考属性?
- twitter-bootstrap - Bootstrap:在某些特定情况下使用断点,即 col-md-auto justify-content-md-center