serializers.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # coding=utf-8
  2. import datetime
  3. from rest_framework import serializers
  4. from apps.tenant.models import Tenant
  5. from apps.tenant.employee.models import Employee
  6. from utils.exceptions import CustomError
  7. from apps.account.models import User
  8. from apps.upload.models import Upload
  9. class TenantSerializer(serializers.ModelSerializer) :
  10. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  11. status_text = serializers.CharField(source='get_status_display', read_only=True)
  12. username = serializers.SerializerMethodField()
  13. image = serializers.SerializerMethodField()
  14. class Meta:
  15. model = Tenant
  16. fields = '__all__'
  17. def get_image(self, obj):
  18. img = Upload.objects.filter(tenant=obj, type=Upload.COMPANY_IMAGE).first()
  19. if img:
  20. return img.get_path()
  21. else:
  22. return ''
  23. def get_username(self, obj):
  24. names = Employee.objects.filter(tenant=obj, user__type=User.SUPER).values('user__username')
  25. name = []
  26. for i in names:
  27. name.append(i.get('user__username'))
  28. return ','.join(name)
  29. def create(self, validated_data):
  30. if Tenant.is_exist(validated_data['company_name']):
  31. raise CustomError(u'名称为[%s]的企业已存在' % validated_data['company_name'])
  32. instance = super(TenantSerializer, self).create(validated_data)
  33. instance.company_no = instance.get_no()
  34. instance.end_date = (datetime.datetime.now() + datetime.timedelta(days=30)).strftime('%Y-%m-%d')
  35. instance.save()
  36. return instance
  37. def update(self, instance, validated_data):
  38. if instance.delete:
  39. raise CustomError(u'企业[%s]已经被删除,禁止修改' % instance.company_name)
  40. if Tenant.is_exist(validated_data['company_name'], instance.id):
  41. raise CustomError(u'名称为[%s]的企业已存在' % validated_data['company_name'])
  42. instance = super(TenantSerializer, self).update(instance, validated_data)
  43. return instance