django-rest-framework(serialization)
阿新 • • 發佈:2019-03-04
mode url setting div 價格 forms 設置 參數設置 gen
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)