博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue + Django2.0.6 学习笔记 5.5 modelserializer实现商品列表页功能
阅读量:4127 次
发布时间:2019-05-25

本文共 2555 字,大约阅读时间需要 8 分钟。

通过此方法可以实现添加商品的功能:

# serializers.pyclass GoodSerializer(serializers.Serializer):    name = serializers.CharField(required=True, max_length=300)    click_num = serializers.IntegerField(default=0)    goods_front_image = serializers.ImageField()    def create(self, validated_data):        """        Create and return a new `Snippet` instance, given the validated data.        """        return Goods.objects.create(**validated_data)# views.py/class GoodListView    def post(self, request, format=None):        serializer = GoodSerializer(data=request.data)        if serializer.is_valid():            serializer.save()            return Response(serializer.data, status=status.HTTP_201_CREATED)        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

但是 添加商品是通过后台 所以前端页面不存在这功能 删掉 = =

 

今天主要说的是通过modelserializer实现之前的数据序列化功能

先说serializers.py

 

from rest_framework import serializersfrom goods.models import Goods, GoodsCategoryclass CategorySerializer(serializers.ModelSerializer):    class Meta:        model = GoodsCategory        fields = "__all__"class GoodSerializer(serializers.ModelSerializer):    # 嵌套序列化 因为Goods中有其中一个外键是GoodsCategory 正常序列化时只会序列化出ID值。如果想要嵌套显示出GoodsCategory的话就这样操作:1. 新建一个 CategorySerializer类 就上面那个2. 在该类中 自定义form,直接按如下输入即可    category = CategorySerializer()    class Meta:        model = Goods        # 这里是决定返回多少字段的地方 如果用__all__的话就是导出所有字段        # fields = ('name', 'click_num', 'market_price', 'add_time')        fields = "__all__"
# views.py# 这样就可以完成序列化了class GoodsListView(APIView):    def get(self, request, format=None):        goods = Goods.objects.all()[:10]        # 因为goods是一个queryset列表对象 所以需要Many=True        goods_serializer = GoodSerializer(goods, many=True)        return Response(goods_serializer.data)

页面返回的显示效果

有一个bug需要说下就是 在这个rest自动生成的页面中右上角是可以登录的 但是测试的时候发现报错 原因是 UserProfile 的Model的返回字段是错的 要改成self.username

class UserProfile(AbstractUser):    """    用户    """    GENDER_CHOICES = (        ('male', u'男'),        ('female', u'女')    )    name = models.CharField(max_length=30, null = True, blank = True, verbose_name=u'姓名')    birthday = models.DateField(null = True, blank=True, verbose_name=u'出生年月')    mobile = models.CharField(max_length=11, verbose_name=u'电话')    gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default='female', verbose_name=u'性别')    email = models.CharField(max_length=100, null=True, blank=True, verbose_name=u'邮箱')    class Meta:        verbose_name = u'用户'        verbose_name_plural = verbose_name# 这里    def __str__(self):        return self.username

完结

转载地址:http://wnepi.baihongyu.com/

你可能感兴趣的文章
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第四章 - 程序计数器
查看>>
第七章 - 本地方法栈
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
MySQL主从复制不一致的原因以及解决方法
查看>>
RedisTemplate的key默认序列化器问题
查看>>
序列化与自定义序列化
查看>>
ThreadLocal
查看>>
从Executor接口设计看设计模式之最少知识法则
查看>>