serializer用起来稍微麻烦,可以使用ModelSerializer,类似于django里的Form与ModelForm

1.定义ModelSerializer

from rest_framework import serializers
from goods.models import Goods, GoodsCategory # class GoodsSerializer(serializers.Serializer):
# """
# Goods的serializer
# """
# name = serializers.CharField(required=True, max_length=100)
# chick_num = serializers.IntegerField(default=0)
# # goods_front_image = serializers.ImageField()
# # 外键需要写数据里的字段名,不能写类里的字段名,例如不能写category,需要些category_id,请求时也得时数据库里的名
# category_id = serializers.IntegerField()
#
# """
# 创建
# """
# def create(self, validated_data):
# return Goods.objects.create(**validated_data) class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = '__all__' # 优点:解决上面的category_id外键问题
class GoodsSerializer(serializers.ModelSerializer):
"""
Goods的serializer
"""
# 自定义,可以获取到外键数据
# read_only表示只用在获取数据
category_obj = CategorySerializer(source='category',read_only=True)
category_name = serializers.CharField(source='category.name',read_only=True)
class Meta:
model = Goods
# 外键写类里的名就可以
# fields = ('name','chick_num','category')
fields = '__all__'

2.View引用

from django.shortcuts import render

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.parsers import JSONParser from goods.models import Goods
from goods.serializer import GoodsSerializer class GoodsList(APIView): def get(self, request):
goods = Goods.objects.all()[:10]
goods_json = GoodsSerializer(goods, many=True)
# print(type(goods_json))
# print(type(goods_json.data))
return Response(goods_json.data) def post(self, request):
serializer = GoodsSerializer(data=request.data) # 不管是form或是json,post过来的数据,都可以通过request.data获取
if serializer.is_valid():
serializer.save()
return Response({'data': 'ok'}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

3.test

django drf 深入ModelSerializer的更多相关文章

  1. 解决Django + DRF:403 FORBIDDEN:CSRF令牌丢失或不正确,{"detail":"CSRF Failed: CSRF cookie not set."}

    我有一个Android客户端应用程序尝试使用Django + DRF后端进行身份验证.但是,当我尝试登录时,我收到以下响应: 403: CSRF Failed: CSRF token missing ...

  2. django DRF理解

    django restframework(DRF) 最近的开发过程当中,发现restframework的功能很强大,所以尝试解读了一下源码,写篇博客分享给大家,有错误的地方还请各位多多指出 视图部分 ...

  3. Django DRF 分页

    Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...

  4. django drf 基础学习2

    DRF基本程序调用一 models初步编写  1 编写model.py    from django.db import models 导入    class dbinfo(models.Model) ...

  5. Django + DRF + Elasticsearch 实现搜索功能

    django使用haystack来调用Elasticsearch搜索引擎  如何使用django来调用Elasticsearch实现全文的搜索 Haystack为Django提供了模块化的搜索.它的特 ...

  6. django drf unique_together和UniqueTogetherValidator

    联合唯一可以使用django中的unique_together,和DRF中的UniqueTogetherValidator->https://www.django-rest-framework. ...

  7. django drf 级联数据和RetrieveModelMixin

    1.定义View from django.shortcuts import render from rest_framework.views import APIView from rest_fram ...

  8. Django drf:序列化增删改查、局部与全局钩子源码流程、认证源码分析、执行流程

    一.序列化类的增.删.改.查 用drf的序列化组件   -定义一个类继承class BookSerializer(serializers.Serializer):   -写字段,如果不指定source ...

  9. 【转】django rest framework ModelSerializer 、serializers小结

    转自:https://blog.csdn.net/l_vip/article/details/79156113 引言 serializers是什么?官网是这样的”Serializers allow c ...

随机推荐

  1. DRBD 数据镜像软件介绍

    简介: DRBD (Distributed Replicated Block Device) 分布式块设备复制,是一种基于软件.网络的块复制存储解决方案.主要用于对服务器之间的磁盘.分区.逻辑卷等进行 ...

  2. 01 lucene基础 北风网项目培训 Lucene实践课程 系统架构

    Lucene在搜索的时候数据源可以是文件系统,数据库,web等等. Lucene的搜索是基于索引,Lucene是基于前面建立的索引之上进行搜索的. 使用Lucene就像使用普通的数据库一样. Luce ...

  3. Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题

    在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识.   这个标识在Java读取文件的时候,不会被去掉,而且Stri ...

  4. spring4-1-Spring的简单介绍

    Spring4.0 是 Spring 推出的一个重大版本升级,进一步加强了 Sring 作为 Java 领域第一开源平台的地位.Spring4.0 引入了众多 Java 开发者期盼的新特性,如泛型依赖 ...

  5. PythonScripter2.7报错ascii codec can't encode characters in position 0-1:ordinal not in range(128)

    1. 这是Python 2 mimetypes的bug2. 需要将Python2.7\lib\mimetypes.py文件中如下片段注释或删除:try: ctype = ctype.encode(de ...

  6. QUrl

    QUrl Detailed Description The QUrl class provides a convenient interface for working with URLs. It c ...

  7. rtx 二次开发,查找所有部门

    1>rtx二次开发操作类 using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  8. ApexSql Log 数据库操作的后悔药

    ApexSQL Log破解版是一款功能强大的SQL数据恢复工具,支持SQL2005/2008/2012.很多时候我们存放在服务器中的SQL数据库会因黑客破坏或误操作造成数据库文件丢失的你问题,当数据库 ...

  9. 文件操作getc

    getc函数的作用是从打开的文件中获取一个字符,并加文件指针自动加1,获取的字符在返回值中. 我写了一个读取一个文件255个字节的程序. int main() { FILE *p; fopen_s(& ...

  10. [C++] the pointer array & the array's pointer

    int *p[4]------p是一个指针数组,每一个指向一个int型的int (*q)[4]---------q是一个指针,指向int[4]的数组 --> type: int(*)[4] vo ...