def form_valid(self, form): """Override form_valid to perform additional actions on new entries.""" codename_verified = False while not codename_verified: new_codename = codenames.codename(uppercase=True) try: Client.objects.filter(codename__iequal=new_codename) except Exception: codename_verified = True form.instance.codename = new_codename return super().form_valid(form)
def assign_project_codename(request, pk): """View function for assigning a codename to a project.""" project_instance = Project.objects.get(id=pk) codename_verified = False while not codename_verified: new_codename = codenames.codename(uppercase=True) try: Project.objects.filter(codename__iequal=new_codename) except Exception: codename_verified = True project_instance.codename = new_codename project_instance.save() # Redirect to the project's details page return HttpResponseRedirect(reverse('rolodex:project_detail', args=(pk, )))
def form_valid(self, form): # Generate and assign a unique codename to the project codename_verified = False while not codename_verified: new_codename = codenames.codename(uppercase=True) try: Project.objects.filter(codename__iequal=new_codename) except Exception: codename_verified = True form.instance.codename = new_codename # Get form context data – used for validation of inline forms ctx = self.get_context_data() objectives = ctx["objectives"] assignments = ctx["assignments"] # Now validate inline formsets # Validation is largely handled by the custom base formset, ``BaseProjectInlineFormSet`` try: with transaction.atomic(): # Save the parent form – will rollback if a child fails validation self.object = form.save() objectives_valid = objectives.is_valid() if objectives_valid: objectives.instance = self.object objectives_object = objectives.save() assignments_valid = assignments.is_valid() if assignments_valid: assignments.instance = self.object assignments.save() if form.is_valid() and objectives_valid and assignments_valid: return super().form_valid(form) else: # Raise an error to rollback transactions raise forms.ValidationError(_("Invalid form data")) # Otherwise return `form_invalid` and display errors except Exception as exception: template = "An exception of type {0} occurred. Arguments:\n{1!r}" message = template.format(type(exception).__name__, exception.args) logger.error(message) return super(ProjectCreate, self).form_invalid(form)
def post(self, *args, **kwargs): self.object = self.get_object() try: old_codename = self.object.codename codename_verified = False while not codename_verified: new_codename = codenames.codename(uppercase=True) try: Project.objects.filter(codename__iequal=new_codename) except Exception: codename_verified = True self.object.codename = new_codename self.object.save() data = { "result": "success", "message": "Codename successfuly updated", "codename": new_codename, } logger.info( "Updated codename of %s %s from %s to %s by request of %s", self.object.__class__.__name__, self.object.id, old_codename, new_codename, self.request.user, ) except Exception as exception: template = "An exception of type {0} occurred. Arguments:\n{1!r}" log_message = template.format( type(exception).__name__, exception.args) logger.error(log_message) data = { "result": "error", "message": "Could not update project's codename" } return JsonResponse(data)