2017-04-06 12 views
0

私は書籍リストのためにAPIViewを作成して追加、削除しています。 このシリアル化は正しい方法ですか? 私は本のリストを見せたいですが、私は何を入れるべきかわかりません。django restフレームワーク多くのシリアライズとapiview

メンバー/ 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) 

ブック/ models.py

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 

ブック/ 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 

答えて

0
あなたがモデルのCRUDを作成したい場合

は、あなたは、単にModelViewSetを使用することができますrequest.userに依存します:ビューのすべてです

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) 

を。ビューセットのためにルータを指定する必要があります。
urls.py:

from rest_framework import routers 

router = routers.DefaultRouter() 

router.register('books', MyBookViewSet) 
urlpatterns = [] 
urlpatterns += router.urls 

は、ルートのURLでこのUSLファイルをインクルードし、設定は完了です。
また、あなたはmyuser名前を使用したい場合はM2M分野のためrelated_nameを指定する必要があります。
mybook = models.ManyToManyField(Book, related_name='myuser')
をそして、あなたはシリアライザで、このフィールドは必要ありません。
mybook = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
viewsets docs
routers docs

関連する問題