如何在django rest框架中为多对多字段定义“isowner”自定义权限?

bejyjqdl  于 2021-09-08  发布在  Java
关注(0)|答案(0)|浏览(268)

我对django非常陌生,尤其是django rest框架。所以在我的这个项目练习中。我想拥有一个对象级权限,一个isowner自定义权限,其中只有作者可以修改它。
我的模型如下所示:

  1. # imports
  2. class Book(models.Model):
  3. title = models.CharField(max_length=100)
  4. description = models.CharField(max_length=400)
  5. publisher = models.CharField(max_length=400)
  6. release_date = models.DateField()
  7. authors = models.ManyToManyField('Author', related_name='authors', blank=True)
  8. def __str__(self):
  9. return self.title
  10. class Author(models.Model):
  11. user= models.ForeignKey(
  12. User, on_delete=models.CASCADE, default=1)
  13. biography = models.TextField()
  14. date_of_birth = models.DateField()
  15. #books = models.ManyToManyField('Book', related_name='authors', blank=True)
  16. def __str__(self):
  17. return self.user.username

这是序列化程序

  1. # imports here
  2. class BookSerializer(serializers.ModelSerializer):
  3. class Meta:
  4. ordering = ['-id']
  5. model = Book
  6. fields = ("id", "title", "description", "publisher", "release_date", "authors")
  7. extra_kwargs = {'authors': {'required': False}}
  8. class AuthorSerializer(serializers.ModelSerializer):
  9. books = BookSerializer(many=True, read_only=True)
  10. class Meta:
  11. ordering = ['-id']
  12. model = Author
  13. fields = ("id", "user", "biography", "date_of_birth", "books")
  14. extra_kwargs = {'books': {'required': False}}

views.py是这样的:

  1. # imports here
  2. class IsAnAuthor(BasePermission):
  3. message = 'Editing book is restricted to the authors only.'
  4. def has_object_permission(self, request, view, obj):
  5. if request.method in SAFE_METHODS:
  6. return True
  7. # I need to filter who can only edit book in this part but
  8. # obj.authors when print is none
  9. return obj.authors == request.user
  10. class BookViewSet(viewsets.ModelViewSet):
  11. """
  12. List all workkers, or create a new worker.
  13. """
  14. permission_classes=[IsAnAuthor]
  15. queryset = Book.objects.all()
  16. serializer_class = BookSerializer
  17. filter_backends = [filters.OrderingFilter]
  18. ordering_fields = ['release_date']
  19. class AuthorViewSet(viewsets.ModelViewSet):
  20. """
  21. List all workers, or create a new worker.
  22. """
  23. #permission_classes=[IsAuthenticatedOrReadOnly]
  24. queryset = Author.objects.all()
  25. serializer_class = AuthorSerializer

我试图实现的是与作者和书籍的多对多关系,并对其实现自定义所有者权限。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题