栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

前端需要&传进的各种格式-----后端对应返回&保存

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

前端需要&传进的各种格式-----后端对应返回&保存

0. 此接口基于drf 1. 正常的列表套字典格式 1.1 格式
[
    {'id':1, 'name': "dbj"},
    {'id':1, 'name': "dbj"},
    {'id':1, 'name': "dbj"}
]
1.2 序列化器写法1(没有外键)
class IndexDetailDataModelSerializer(serializers.ModelSerializer):
   
    class meta:
        model = models.Release
        fields = [
          'id','name'
        ]
1.3 序列化器写法2(有外键,配合models) 
class IndexDetailDataModelSerializer(serializers.ModelSerializer):
   
    class meta:
        model = models.Release
        fields = [
          'id','name'
        ]

class Release(baseModel):

    # 反向
    @property
    def cover_msg_url(self):
        # 每一个对象走一遍
        name= self.media.all().filter(is_show=True, is_delete=False).first().name
        # print(name)
        return name

  
 1.4 序列化器写法3(有外键,用source) 
class IndexDetailDataModelSerializer(serializers.ModelSerializer):
    """首页的详情页返回的数据"""
    topic = serializers.CharField(source='topic.name')
  

    class meta:
        model = models.Release
        fields = [
            'id', 'position', 'content', 'topic',  'update_time', 
        ]
2. 列表套字典+字典(涉及到外键的返回) 2.1 格式
[
    {
        "id": 48,
        "cover": "xxx",
        "content": "xxx",
        "favor_count": "2022-02-23T15:01:06.828179Z",
        "user": {
            'id': 1, 'nickname': 'xxx', 'avatar': 'xxx'
        },
        "topic": {
            'id': 1, 'title': 'xxx'
        }
    },
]
2.2 序列化器写法1
from api import models

from django.forms import model_to_dict


class NewsModelSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()
    topic = serializers.SerializerMethodField()

    class meta:
        model = models.News
        fields = ['id', 'cover', 'content', 'topic', "user", 'favor_count']

    def get_user(self, obj):
        # 外键 obj--当前模型对象
        return model_to_dict(obj.user, fields=['id', 'nickname', 'avatar'])

    def get_topic(self, obj):
        # 外键 obj--当前模型对象
        if not obj.topic:
            return
        return model_to_dict(obj.topic, fields=['id', 'title'])
3. 字典套列表+列表+字典(多个字典)(涉及到外键的返回) 3.1 格式
{
    "id": 27,
    "position": "xx",
    "content": "xxxx",
    "topic": "xxx",
    "nickName": "xx",
    "update_time": "2022-02-22T12:08:50.285284Z",
    "msg_url": [
        {
            "cosUrl": "1684846.png"
        },
        {
            "cosUrl": "1684846.png"
        },
        {
            "cosUrl": "1684846.png"
        }
    ]
}
3.2 序列化器配合models写法
class IndexDetailDataModelSerializer(serializers.ModelSerializer):
    """首页的详情页返回的数据"""
    topic = serializers.CharField(source='topic.name')
    nickName = serializers.CharField(source='userinfo.nickName')

    class meta:
        model = models.Release
        fields = [
            'id', 'position', 'content', 'topic', 'nickName', 'update_time', 'msg_url'
        ]

class Release(baseModel):
    """反向查询"""

    # 图片链接拼接
    @property
    def msg_url(self):
        msg_url = self.media.all().filter(is_show=True, is_delete=False).values('cosUrl')
        return msg_url
4. 字典套列表+列表+字典(单个字典)(涉及到外键的返回) 4.1 格式
{
    "position": 27,
    "content": "xx",
    "topic_id": "xxxx",
    "userinfo_id": "xxx",
    "cos_data ": [
        {
            "cosUrl": "1684846.png", 
            "cosETag": "6",
            "cos_media_name": "png",
        }
       
    ]
}
4.2 序列化器(一般序列化器嵌套)
class MediaModelSerializer(serializers.ModelSerializer):
    class meta:
        model = models.Media
        fields = ['cosUrl', 'cosETag', 'cos_media_name']


class ReleaseModelSerializer(serializers.ModelSerializer):
    cos_data = MediaModelSerializer(many=True, write_only=True)
    topic_id = serializers.CharField(write_only=True)
    userinfo_id = serializers.CharField(write_only=True)

    class meta:
        model = models.Release
        fields = ['position', 'content', 'topic_id', 'userinfo_id', 'cos_data']

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号