serializers.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. class MutableFields(object):
  2. @classmethod
  3. def subset_fields(cls, *fields):
  4. fields_in_name = [f.title().replace('_', '') for f in fields]
  5. name = '{}{}Subset'.format(cls.__name__, ''.join(fields_in_name)[:100])
  6. class Meta(cls.Meta):
  7. pass
  8. Meta.fields = tuple(fields)
  9. return type(name, (cls, ), {'Meta': Meta})
  10. @classmethod
  11. def exclude_fields(cls, *fields):
  12. final_fields = []
  13. for field in cls.Meta.fields:
  14. if field not in fields:
  15. final_fields.append(field)
  16. fields_in_name = [f.title().replace('_', '') for f in final_fields]
  17. name = '{}{}Subset'.format(cls.__name__, ''.join(fields_in_name)[:100])
  18. class Meta(cls.Meta):
  19. pass
  20. Meta.fields = tuple(final_fields)
  21. return type(name, (cls, ), {'Meta': Meta})
  22. @classmethod
  23. def extend_fields(cls, *fields):
  24. final_fields = list(cls.Meta.fields)
  25. for field in fields:
  26. if field not in final_fields:
  27. final_fields.append(field)
  28. fields_in_name = [f.title().replace('_', '') for f in final_fields]
  29. name = '{}{}Subset'.format(cls.__name__, ''.join(fields_in_name)[:100])
  30. class Meta(cls.Meta):
  31. pass
  32. Meta.fields = tuple(final_fields)
  33. return type(name, (cls, ), {'Meta': Meta})