本文共 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/