首页 > 其他 > 详细

django-rest-framework(serialization)

时间:2019-03-04 15:53:51      阅读:210      评论:0      收藏:0      [点我收藏+]

Requirements:

coreapi (1.32.0+) - Schema generation support.
Markdown (2.1.0+) - Markdown support for the browsable API.
django-filter (1.0.1+) - Filtering support.
django-crispy-forms - Improved HTML display for filtering.
django-guardian (1.1.1+) - Object level permissions support.

 

$ pip install coreapi markdown django-filter django-crispy-forms django-guardian djangorestframework

  

settings.py

INSTALLED_APPS = (
    ...
    ‘rest_framework‘,
) 

urls.py

from django.conf.urls import include

urlpatterns = [
    ...
    url(r‘^api-auth/‘, include(‘rest_framework.urls‘))
]

  

Model:

projects/apps/goods/models.py

from django.db import models


class Goods(models.Model):
    """
    商品
    """
    name = models.CharField(max_length=100, verbose_name="商品名")
    category = models.ForeignKey(GoodsCategory, verbose_name="商品类别", on_delete=models.CASCADE)
    sold_num = models.IntegerField(default=0, verbose_name="商品销售量")
    fav_num = models.IntegerField(default=0, verbose_name="收藏数")
    goods_num = models.IntegerField(default=0, verbose_name="库存数")
    price = models.FloatField(default=0, verbose_name="本店价格")

    class Meta:
        verbose_name = ‘商品‘
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name 
$ python manage.py makemigrations goods
$ python manage.py migrate

  

Serialization:

如同Django提供了Form类和ModelForm类一样,REST framework包括Serializer类和ModelSerializer类.

from rest_framework import serializers
from goods.models import Goods


class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        # fields = ("name","sold_num","fav_num","price")
        fields = "__all__"

 上述代码还存在一个问题,由于category字段是Category表的外键,因此此处我们显示的结果仅仅是Category表中的id,而不是该表的所有字段

解决方法:

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = GoodsCategory
        fields = "__all__"

class GoodsSerializer(serializers.ModelSerializer):
    category = CategorySerializer()
    class Meta:
        model = Goods
        # fields = ("name","sold_num","fav_num","price")
        fields = "__all__"

  如果应用于多对多关系,则应将此参数设置为True,category = CategorySerializer(many=True)

django-rest-framework(serialization)

原文:https://www.cnblogs.com/zenan/p/10470247.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!