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

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']

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑猪去兜风z1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值