Django rest framework django rest框架多对多序列化和apiview
我正在为图书列表和添加、删除创建APIView。 这条路对吗? 我想给大家看一张书单,但我不知道该在“?”里放什么 member/models.pyDjango 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 =
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)