Skip to content

Commit

Permalink
ListSerializer 支持 exclude 参数
Browse files Browse the repository at this point in the history
  • Loading branch information
007gzs committed Jul 31, 2024
1 parent dfb7378 commit 47bc26b
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 6 deletions.
12 changes: 6 additions & 6 deletions cool/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
from cool.settings import cool_settings


def get_field_value(field_name, field_index, default=None, *args, **kwargs):
ret = default
if field_name in kwargs:
ret = kwargs[field_name]
elif len(args) > field_index:
ret = args[field_index]
def get_field_value(__field_name, __field_index, __default=None, *args, **kwargs):
ret = __default
if __field_name in kwargs:
ret = kwargs[__field_name]
elif len(args) > __field_index:
ret = args[__field_index]
return ret


Expand Down
7 changes: 7 additions & 0 deletions cool/views/serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class ListSerializer(serializers.ListSerializer):
def __init__(self, *args, **kwargs):
self.order_by = kwargs.pop('order_by', None)
self.filter = kwargs.pop('filter', None)
self.exclude = kwargs.pop('exclude', None)
self.limit = kwargs.pop('limit', None)
super().__init__(*args, **kwargs)

Expand All @@ -21,6 +22,8 @@ def get_attribute(self, instance):
attribute = attribute.get_queryset()
if self.filter is not None and isinstance(self.filter, dict):
attribute = attribute.filter(**self.filter)
if self.exclude is not None and isinstance(self.exclude, dict):
attribute = attribute.exclude(**self.exclude)
if self.order_by is not None:
order_by = self.order_by if isinstance(self.order_by, list) else [self.order_by]
attribute = attribute.order_by(*order_by)
Expand All @@ -35,19 +38,23 @@ class ListSerializerMixin:
@classmethod
def many_init(cls, *args, **kwargs):
meta = getattr(cls, 'Meta', None)

order_by = kwargs.pop('order_by', None)
_filter = kwargs.pop('filter', None)
exclude = kwargs.pop('exclude', None)
limit = kwargs.pop('limit', None)
if meta is not None and not hasattr(meta, 'list_serializer_class'):
meta.list_serializer_class = ListSerializer
ret = super().many_init(*args, **kwargs)
if isinstance(ret, ListSerializer):
getattr(ret, '_kwargs', dict())['order_by'] = order_by
getattr(ret, '_kwargs', dict())['filter'] = _filter
getattr(ret, '_kwargs', dict())['exclude'] = exclude
getattr(ret, '_kwargs', dict())['limit'] = limit
ret.order_by = order_by
ret.filter = _filter
ret.limit = limit
ret.exclude = exclude
return ret


Expand Down
4 changes: 4 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
Changelog
================
Version 1.2.13=4
------------------
+ `ListSerializer` 支持 `exclude` 参数

Version 1.2.13
------------------
+ `Constants` 支持扩展属性
Expand Down

0 comments on commit 47bc26b

Please sign in to comment.