serializers.py 895 B

123456789101112131415161718192021222324252627282930313233
  1. class Subsettable(object):
  2. @classmethod
  3. def subset(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 = fields
  9. return type(name, (cls,), {
  10. 'Meta': Meta
  11. })
  12. @classmethod
  13. def subset_exclude(cls, *fields):
  14. clean_fields = []
  15. for field in cls.Meta.fields:
  16. if field not in fields:
  17. clean_fields.append(field)
  18. fields_in_name = [f.title().replace('_', '') for f in clean_fields]
  19. name = '{}{}Subset'.format(cls.__name__, ''.join(fields_in_name)[:100])
  20. class Meta(cls.Meta):
  21. pass
  22. Meta.fields = tuple(clean_fields)
  23. return type(name, (cls,), {
  24. 'Meta': Meta
  25. })