Django rest framework django rest框架多对多序列化和apiview

Django rest framework django rest框架多对多序列化和apiview,django-rest-framework,Django Rest Framework,我正在为图书列表和添加、删除创建APIView。 这条路对吗? 我想给大家看一张书单,但我不知道该在“?”里放什么 member/models.py class MyUser(AbstractBaseUser, PermissionsMixin): username = models.EmailField(unique=True, max_length=256) nickname = models.CharField(max_length=256) is_staff =

我正在为图书列表和添加、删除创建APIView。 这条路对吗? 我想给大家看一张书单,但我不知道该在“?”里放什么

member/models.py

class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.EmailField(unique=True, max_length=256)
    nickname = models.CharField(max_length=256)
    is_staff = models.BooleanField(default=False)
    created_date = models.DateTimeField(auto_now_add=True)
    mybook = models.ManyToManyField(Book)
from django.db import models


class Book(models.Model):
    title = models.CharField(max_length=256)
    author = models.CharField(max_length=200)

    def __str__(self):
        return self.title
book/models.py

class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.EmailField(unique=True, max_length=256)
    nickname = models.CharField(max_length=256)
    is_staff = models.BooleanField(default=False)
    created_date = models.DateTimeField(auto_now_add=True)
    mybook = models.ManyToManyField(Book)
from django.db import models


class Book(models.Model):
    title = models.CharField(max_length=256)
    author = models.CharField(max_length=200)

    def __str__(self):
        return self.title
book/seralizers.py

from rest_framework import serializers

from book.models import Book


class MyBookSerializer(serializers.ModelSerializer):
    mybook = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Book
        fields = (
            'title',
            'author',
    )
apiview.py

class MyBook(APIView):

    def get(self, request):
        mybook = Book.objects.filter(myuser=?)
        serializer = MyBookSerializer(mybook)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def post(self, request):
        pass

    def delete(self, request):
        pass

如果要为模型创建CRUD,则取决于
请求。用户
只需使用
ModelViewSet

from rest_framework import viewsets

class MyBookViewSet(viewsets.ModelViewSet):
    serializer_class = MyBookSerializer

    def get_queryset(self, request):
        return Book.objects.filter(myuser=self.request.user)
这就是我的看法。您只需要为视图集指定路由器。
URL.py:

from rest_framework import routers

router = routers.DefaultRouter()

router.register('books', MyBookViewSet)
urlpatterns = []
urlpatterns += router.urls  
将此usl文件包含在根URL中,您就完成了。
如果要使用
myuser
name:
mybook=models.ManyToManyField(Book,related_name='myuser')

在序列化程序中不需要此字段:
mybook=serializers.PrimaryKeyRelatedField(many=True,read\u only=True)