Skip to content

Instantly share code, notes, and snippets.

@weargoggles
Last active September 11, 2017 14:02
Show Gist options
  • Save weargoggles/7ca413283688462005f87a081301b660 to your computer and use it in GitHub Desktop.
Save weargoggles/7ca413283688462005f87a081301b660 to your computer and use it in GitHub Desktop.
class OfficeUpdateUserSerializer(serializers.Serializer):
# http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/
id = serializers.UUIDField(null=True)
first_name = serializers.CharField()
last_name = serializers.CharField()
email = serializers.EmailField()
role = serializers.CharField(choices=User.ROLES)
active = serializers.BooleanField(default=True)
class OfficeUpdateSerializer(serializers.Serializer):
name = serializers.CharField()
custom_domain = DomainField(null=True)
users = OfficeUpdateUserSerializer(many=True)
@api_view(['POST'])
def update_office(request, office_id):
office = get_object_or_404(Office, pk=office_id)
serializer = OfficeUpdateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
office.name = serializer.validated_data['name']
office.custom_domain = serializer.validated_data['custom_domain']
users = []
for validated_user in serializer.validated_data['users']:
user_data = {
"first_name": user['first_name'],
"last_name": user['last_name'],
"role": user['role'],
"active": user['active'],
}
if validated_user['id']:
user, _ = User.objects.update_or_create(
pk=user.pop('id'),
defaults=user_data,
)
else:
user = User.objects.create(**user_data)
office.users = users
office.save()
outgoing_serializer = OfficeSerializer(instance=office)
return Response(outgoing_serializer.data, status=200)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment