创建model ,必须有,不管是使用serializers还是ModelSerializer
# Create your models here.
# 学院表
class College(models.Model):
collegename=models.CharField('学院名称',max_length=30)
def __str__(self):
return self.collegename
# 班级表
class Classes(models.Model):
classxuhao=models.IntegerField('班级序号')
classname=models.CharField('班级名称',max_length=30)
college=models.ForeignKey(to=College,on_delete=models.CASCADE)
方法一:使用serializers化器
from rest_framework import serializers
from .models import *
class Classesserializers(serializers.Serializer):
classxuhao = serializers.CharField()
classname = serializers.CharField(max_length=20,validators=[myva])
# 根据StringRelatedField可以查询到关联字段学院名称,设置只读属性,序列化的时候使用
college = serializers.StringRelatedField(read_only=True)
# 获取关联的数据的id,需要设置成IntegerField,
college_id = serializers.IntegerField()
方法二:使用模型类序列化器ModelSerializer
from rest_framework import serializers
from .models import *
# 模型类序列化器是基于model创建的
# ModelSerializer与常规的Serializer相同,但提供了:
# 基于模型类自动生成一系列字段
# 基于模型类自动为Serializer生成validators,比如unique_together
# 包含默认的create()和update()的实现
class Modelserialz(serializers.ModelSerializer):
class Meta:
# model=需要关联的模型里表的名称
model=Classes
fields='__all__'
使用ModelViewSet创建视图(最简洁)
from .models import Classes
from .serializers import Classesserializers
from rest_framework.viewsets import ModelViewSet
class GetView(ModelViewSet):
# 指定查询集
queryset=Classes.objects.all()
# 指定序列化器
serializer_class=Classesserializers
#需要重新定义一下更新方法
def put(self, request, pk):
return self.update(request)
创建router对象,并注册视图集,
from rest_framework import routers
from .GenMixViewset import GetView
urlpatterns=[
]
router = routers.SimpleRouter()
router.register(r'classes', GetView, basename='classes')
urlpatterns += router.urls