kawaz.api.mixins のソースコード

# coding=utf-8
"""
"""

__all__ = (
    'ReadModelMixin', 'WriteModelMixin',
    'CreateModelMixin', 'ListModelMixin',
    'RetrieveModelMixin', 'UpdateModelMixin',
    'DestroyModelMixin',
)
from rest_framework.mixins import CreateModelMixin as _CreateModelMixin


[ドキュメント]class ReadModelMixin(object): """ A mixin for reading model objects. It add `get_queryset_for_read` method and override `get_queryset` method. """
[ドキュメント] def get_queryset_for_read(self): """ Return a queryset for reading. If the object manager have `published` method, this execute the method with `self.request.user`, otherwise it simply return all. """ m = self.model.objects if hasattr(m, 'published'): return m.published(self.request.user) return m.all()
[ドキュメント] def get_queryset(self): return self.get_queryset_for_read()
[ドキュメント]class WriteModelMixin(object): """ A mixin for writing model objects. It add `get_queryset_for_write` method and override `get_queryset` method. """
[ドキュメント] def get_queryset_for_write(self): """ Return a queryset for writing. If the object manager have `related` method, this execute the method with `self.request.user`, otherwise it simply return all. """ m = self.model.objects if hasattr(m, 'related'): return m.related(self.request.user) return m.all()
[ドキュメント] def get_queryset(self): return self.get_queryset_for_write()
class ReadWriteModelMixin(ReadModelMixin, WriteModelMixin): """ A mixin for reading/writing model objects. It add `get_queryset_for_read` method and `get_queryset_for_write` method and override `get_queryset` method. The queryset will be determined from the value of `self.request.method`. """ def get_queryset(self): if self.request.method == 'GET': return self.get_queryset_for_read() return self.get_queryset_for_write()
[ドキュメント]class CreateModelMixin(_CreateModelMixin): """ Create model instance and automatically save author """
[ドキュメント] def get_extra_fields(self): # serializer.saveに渡す引数を取り出します # validation check if not hasattr(self, 'author_field_name'): raise AttributeError( "You need to specify 'author_field_name' as " "a class attribute to '{}'. " "If there is no author field, simply specify 'None'.".format( self.__class__.__name__) ) extra_fields = {} if self.author_field_name and self.request.user.is_authenticated(): extra_fields.update({self.author_field_name: self.request.user}) return extra_fields
[ドキュメント] def perform_create(self, serializer): extras = self.get_extra_fields() serializer.save(**extras)
# Make it easy to understand, just make alias of rest_framework builtins from rest_framework.mixins import ListModelMixin from rest_framework.mixins import RetrieveModelMixin from rest_framework.mixins import UpdateModelMixin from rest_framework.mixins import DestroyModelMixin