def add_additional_create_idea_params(idea: Idea, data: dict, url_slug: str) -> None: idea.url_slug = url_slug try: hub = Hub.objects.get(url_slug=data['hub']) hub_shared_in = Hub.objects.get(url_slug=data['hub_shared_in']) except Hub.DoesNotExist: idea.delete() raise ValidationError('Hub does not exist: ' + data['hub']) idea.hub = hub idea.hub_shared_in = hub_shared_in if 'location' in data: idea.location = get_location(data['location']) if 'image' in data and 'thumbnail_image' in data: idea.image = get_image_from_data_url(data['image'])[0] idea.thumbnail_image = get_image_from_data_url( data['thumbnail_image'])[0] if 'parent_organization' in data: try: organization = Organization.objects.get( id=data['parent_organization']) except Organization.DoesNotExist: idea.delete() raise ValidationError('Organization does not exist!') idea.organization = organization try: idea.save() except IntegrityError: if url_slug.endswith(str(idea.id)): # It seems like we alread called this function and added the id to the url slug, but there is still an integrity error! # Seems like it is unrelated to the url_slug and there is some bigger problem idea.delete() raise ValidationError("Internal Server Error") else: # The url slug is already taken! We'll append the project id in the end to make it unique again add_additional_create_idea_params(idea, data, url_slug + str(idea.id))