Vue + Django2.0.6 学习笔记 5.5 modelserializer实现商品列表页功能

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

# serializers.py

class 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 serializers

from goods.models import Goods, GoodsCategory


class 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

完结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@凌晨三点半

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

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

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

打赏作者

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

抵扣说明:

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

余额充值