Django-REST-Framework获取表和关联字段的值
首先在Django项目创建表
安装Django REST Framework:
pip install djangorestframework
以书籍和出版社为例(model.py):
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=32)
create_time = models.DateField(auto_now_add=True)
# 书籍的类型
BookType = models.SmallIntegerField(
choices=((1, "原创"), (2, "转载")),
default=1
)
# 出版社(一对多)
publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)
# 标签(多对多)
tag = models.ManyToManyField(to='Tag')
# 书籍出版社表
class Publish(models.Model):
name = models.CharField(max_length=32)
# 书籍标签表
class Tag(models.Model):
name = models.CharField(max_length=16)
自己动手在为每张表添加几条记录,并做好关联。
创建一个专门存放序列化类的py文件
serialize.py
from app01 import models
from rest_framework import serializers
class Serialize(serializers.ModelSerializer):
# 表中有choices的字段时,此代码是将对应的描述信息显示到页面
BookType = serializers.CharField(source='get_BookType_display')
class Meta:
# 要查找的表
model = models.Book
# 查找的字段,可以为一个列表
fields = '__all__'
# 查找关联外键的深度,官方建议不超过10
depth = 1
接下来要写视图逻辑了
首先先在url.py里添加一个url
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^book_list/', views.Article_list.as_view()),
]
在views.py中:
from django import views
from app01 import models
from django.http import JsonResponse
from app01.serialize import Serialize # 这是从上面自己写的导入的
# Create your views here.
class Book_list(views.View):
def get(self, request):
article_list = models.Article.objects.all()
# 实例化并把查询的结果传进去,当结果是多个时需要声明many=True
ret = Serialize(article_list, many=True)
# JsonResponse方法默认只能传递字典格式的数据,是其他格式时将safe改成False
return JsonResponse(ret.data, safe=False)
此时用postman对后端进行get请求,得到的数据如下图: