Modes.py
from django.db import models
class Studentmodel(models.Model):
name = models.CharField(max_length=32)
course = models.ManyToManyField(to='Coursemodel',related_name="student")
class Meta:
db_table = 'student'
class Coursemodel(models.Model):
name = models.CharField(max_length=32)
class Meta:
db_table = 'course'
Serializer.py
添加和修改涉及代码的重写 否则只能read或者write
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import Studentmodel, Coursemodel
class CourseSer(ModelSerializer):
class Meta:
model = Coursemodel
fields = "__all__"
class StudentSer(ModelSerializer):
course = CourseSer(read_only=True, many=True)
course_list = serializers.ListField(write_only=True)
# 添加
def create(self, validated_data):
# print(validated_data)
name = validated_data.get('name')
course_list = validated_data.get('course_list')
Stu = Studentmodel.objects.create(name=name)
for course in course_list:
Stu.course.add(course)
return Stu
# 修改
def update(self, instance, validated_data):
name = validated_data.get('name')
course_list = validated_data.get('course_list')
instance.name = name
instance.course.set(course_list)
instance.save()
return instance
class Meta:
model = Studentmodel
fields = "__all__"
utils.py
from rest_framework.pagination import PageNumberPagination
class MyFenye(PageNumberPagination):
page_size = 3 # 每页的数据条数
page_query_param = 'page' # 获取的参数(当前页数)
View.py
from .models import Studentmodel,Coursemodel
from .serializer import StudentSer,CourseSer
from rest_framework.viewsets import ModelViewSet
from utils import MyFenye
class CourseView(ModelViewSet):
queryset = Coursemodel.objects.all() #获取数据库所有数据
serializer_class = CourseSer # 选择使用的序列化器
pagination_class = MyFenye # 选择分页器
class StuView(ModelViewSet):
queryset = Studentmodel.objects.all()
serializer_class = StudentSer
pagination_class = MyFenye
urls.py
主路由
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('M2M.urls')),
]
使用了路由分发
from django.urls import path, include
from rest_framework import routers
from .views import StuView, CourseView
router = routers.DefaultRouter()
router.register('stu', StuView)
router.register('course', CourseView)
urlpatterns = [
path('', include(router.urls))
]
启动服务
http://127.0.0.1:8000/api/course/
获取course表的所有数据
http://127.0.0.1:8000/api/course/1/
获取course表pk为1的数据
http://127.0.0.1:8000/api/stu/
通过这个链接进行获取全部的数据
http://127.0.0.1:8000/api/stu/1/
获取主键为1的数据