Repository URL to install this package:
|
Version:
0.2.0a11 ▾
|
from typing import Type
from rest_framework import serializers, viewsets, mixins
from .models import KaosModel
class KaosModelSerializer(serializers.ModelSerializer):
def get_field_names(self, declared_fields, info):
meta_fields = getattr(self.Meta, 'fields', None)
if meta_fields is None:
self.Meta.fields = self.Meta.model.config.get_flat_fields()
return super().get_field_names(declared_fields, info)
class Meta:
model: Type[KaosModel]
class GenericKaosModelViewSet(viewsets.GenericViewSet):
model: Type[KaosModel] = None
lookup_field = 'uuid'
def get_queryset(self):
if self.queryset is None:
return self.model.objects.all()
return super().get_queryset()
def _get_model(self):
if self.model is not None:
return self.model
if self.queryset is not None:
return self.queryset.model
raise Exception("Set at least one of model or queryset")
@property
def search_fields(self):
return self._get_model().config.search_fields
@property
def filterset_fields(self):
return self._get_model().config.filterset_fields
class KaosModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericKaosModelViewSet):
pass
__all__ = (
'KaosModelSerializer',
'GenericKaosModelViewSet',
'KaosModelViewSet',
)