def manage_project(request, name=None, template=None): """Admin interface: manage project.""" log.debug("Admin interface: manage project.") if not (request.user.is_authenticated() and request.user.has_perm("base.can_manage")): raise Http404 SubpageInlineFormSet = inlineformset_factory(Project, Subpage, extra=1) form = ProjectForm() formset = SubpageInlineFormSet() locales_selected = [] subtitle = "Add project" pk = None warning = None if request.method == "POST": locales_selected = Locale.objects.filter(pk__in=request.POST.getlist("locales")) # Update existing project try: pk = request.POST["pk"] project = Project.objects.get(pk=pk) form = ProjectForm(request.POST, instance=project) formset = SubpageInlineFormSet(request.POST, instance=project) # Needed if form invalid subtitle = "Edit project" # Add a new project except MultiValueDictKeyError: form = ProjectForm(request.POST) formset = SubpageInlineFormSet(request.POST) # Needed if form invalid if form.is_valid(): project = form.save(commit=False) formset = SubpageInlineFormSet(request.POST, instance=project) if formset.is_valid(): project.save() form.save_m2m() # https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method formset.save() formset = SubpageInlineFormSet( instance=project ) # Properly displays formset, but removes errors (only usable if valid) subtitle += ". Saved." pk = project.pk if len(Entity.objects.filter(project=project)) is 0: warning = "Before localizing the project, you need to import strings from the repository." else: subtitle += ". Error." else: subtitle += ". Error." # If URL specified and found, show edit, otherwise show add form elif name is not None: try: project = Project.objects.get(name=name) pk = project.pk form = ProjectForm(instance=project) formset = SubpageInlineFormSet(instance=project) locales_selected = project.locales.all() subtitle = "Edit project" if len(Entity.objects.filter(project=project)) is 0: warning = "Before localizing the project, you need to import strings from the repository." except Project.DoesNotExist: form = ProjectForm(initial={"name": name}) data = { "form": form, "formset": formset, "locales_selected": locales_selected, "locales_available": Locale.objects.exclude(pk__in=locales_selected), "subtitle": subtitle, "pk": pk, "warning": warning, } return render(request, template, data)
def manage_project(request, slug=None, template='admin_project.html'): """Admin project.""" log.debug("Admin project.") if not request.user.has_perm('base.can_manage'): return render(request, '403.html', status=403) SubpageInlineFormSet = inlineformset_factory(Project, Subpage, extra=1) form = ProjectForm() formset = SubpageInlineFormSet() locales_selected = [] subtitle = 'Add project' pk = None project = None message = 'Before localizing projects, \ you need to import strings from the repository.' autoupdate = False # Save project if request.method == 'POST': locales_selected = Locale.objects.filter( pk__in=request.POST.getlist('locales')) # Update existing project try: pk = request.POST['pk'] project = Project.objects.get(pk=pk) form = ProjectForm(request.POST, instance=project) # Needed if form invalid formset = SubpageInlineFormSet(request.POST, instance=project) subtitle = 'Edit project' # Add a new project except MultiValueDictKeyError: form = ProjectForm(request.POST) # Needed if form invalid formset = SubpageInlineFormSet(request.POST) if form.is_valid(): if set(project.locales.all()) != set(locales_selected): autoupdate = True project = form.save(commit=False) formset = SubpageInlineFormSet(request.POST, instance=project) if formset.is_valid(): project.save() # http://bit.ly/1glKN50 form.save_m2m() formset.save() # Properly displays formset, but removes errors (if valid only) formset = SubpageInlineFormSet(instance=project) subtitle += '. Saved.' pk = project.pk if not Resource.objects.filter(project=project).exists(): messages.warning(request, message) elif autoupdate: messages.warning( request, 'After updating locales, \ strings need to be imported from the repository.') else: subtitle += '. Error.' else: subtitle += '. Error.' # If URL specified and found, show edit, otherwise show add form elif slug is not None: try: project = Project.objects.get(slug=slug) pk = project.pk form = ProjectForm(instance=project) formset = SubpageInlineFormSet(instance=project) locales_selected = project.locales.all() subtitle = 'Edit project' if not Resource.objects.filter(project=project).exists(): messages.warning(request, message) except Project.DoesNotExist: form = ProjectForm(initial={'slug': slug}) data = { 'form': form, 'formset': formset, 'locales_selected': locales_selected, 'locales_available': Locale.objects.exclude(pk__in=locales_selected), 'REPOSITORY_TYPE_CHOICES': Project.REPOSITORY_TYPE_CHOICES, 'subtitle': subtitle, 'pk': pk, 'autoupdate': autoupdate, } # Set locale in Translate link if project: locale = utils.get_project_locale_from_request( request, project.locales) or locales_selected[0].code if locale: data['translate_locale'] = locale if Resource.objects.filter(project=project).exists(): data['ready'] = True return render(request, template, data)
def manage_project(request, slug=None, template='admin_project.html'): """Admin interface: manage project.""" log.debug("Admin interface: manage project.") if not request.user.has_perm('base.can_manage'): return render(request, '403.html', status=403) SubpageInlineFormSet = inlineformset_factory(Project, Subpage, extra=1) form = ProjectForm() formset = SubpageInlineFormSet() locales_selected = [] subtitle = 'Add project' pk = None project = None message = 'Before localizing projects, \ you need to import strings from the repository.' if request.method == 'POST': locales_selected = Locale.objects.filter( pk__in=request.POST.getlist('locales')) # Update existing project try: pk = request.POST['pk'] project = Project.objects.get(pk=pk) form = ProjectForm(request.POST, instance=project) # Needed if form invalid formset = SubpageInlineFormSet(request.POST, instance=project) subtitle = 'Edit project' # Add a new project except MultiValueDictKeyError: form = ProjectForm(request.POST) # Needed if form invalid formset = SubpageInlineFormSet(request.POST) if form.is_valid(): project = form.save(commit=False) formset = SubpageInlineFormSet(request.POST, instance=project) if formset.is_valid(): project.save() # http://bit.ly/1glKN50 form.save_m2m() formset.save() # Properly displays formset, but removes errors (if valid only) formset = SubpageInlineFormSet(instance=project) subtitle += '. Saved.' pk = project.pk if not Resource.objects.filter(project=project).exists(): messages.warning(request, message) else: subtitle += '. Error.' else: subtitle += '. Error.' # If URL specified and found, show edit, otherwise show add form elif slug is not None: try: project = Project.objects.get(slug=slug) pk = project.pk form = ProjectForm(instance=project) formset = SubpageInlineFormSet(instance=project) locales_selected = project.locales.all() subtitle = 'Edit project' if not Resource.objects.filter(project=project).exists(): messages.warning(request, message) except Project.DoesNotExist: form = ProjectForm(initial={'slug': slug}) data = { 'form': form, 'formset': formset, 'locales_selected': locales_selected, 'locales_available': Locale.objects.exclude(pk__in=locales_selected), 'REPOSITORY_TYPE_CHOICES': Project.REPOSITORY_TYPE_CHOICES, 'subtitle': subtitle, 'pk': pk, } if Resource.objects.filter(project=project).exists(): data['ready'] = True return render(request, template, data)
def manage_project(request, slug=None, template='admin_project.html'): """Admin project.""" log.debug("Admin project.") if not request.user.has_perm('base.can_manage'): return render(request, '403.html', status=403) SubpageInlineFormSet = inlineformset_factory( Project, Subpage, extra=1, fields=('project', 'name', 'url')) form = ProjectForm() formset = SubpageInlineFormSet() locales_selected = [] subtitle = 'Add project' pk = None project = None message = 'Please wait while strings are imported from the repository.' autoupdate = False # Save project if request.method == 'POST': locales_selected = Locale.objects.filter( pk__in=request.POST.getlist('locales')) # Update existing project try: pk = request.POST['pk'] project = Project.objects.get(pk=pk) form = ProjectForm(request.POST, instance=project) # Needed if form invalid formset = SubpageInlineFormSet(request.POST, instance=project) subtitle = 'Edit project' # Add a new project except MultiValueDictKeyError: form = ProjectForm(request.POST) # Needed if form invalid formset = SubpageInlineFormSet(request.POST) autoupdate = True if form.is_valid(): if project and set(project.locales.all()) != set(locales_selected): autoupdate = True project = form.save(commit=False) formset = SubpageInlineFormSet(request.POST, instance=project) if formset.is_valid(): project.save() # http://bit.ly/1glKN50 form.save_m2m() formset.save() # Properly displays formset, but removes errors (if valid only) formset = SubpageInlineFormSet(instance=project) subtitle += '. Saved.' pk = project.pk if autoupdate: messages.warning(request, message) else: subtitle += '. Error.' else: subtitle += '. Error.' # If URL specified and found, show edit, otherwise show add form elif slug is not None: try: project = Project.objects.get(slug=slug) pk = project.pk form = ProjectForm(instance=project) formset = SubpageInlineFormSet(instance=project) locales_selected = project.locales.all() subtitle = 'Edit project' if not Resource.objects.filter(project=project).exists(): autoupdate = True messages.warning(request, message) except Project.DoesNotExist: form = ProjectForm(initial={'slug': slug}) # Override default label suffix form.label_suffix = '' data = { 'form': form, 'formset': formset, 'locales_selected': locales_selected, 'locales_available': Locale.objects.exclude(pk__in=locales_selected), 'REPOSITORY_TYPE_CHOICES': Project.REPOSITORY_TYPE_CHOICES, 'subtitle': subtitle, 'pk': pk, 'autoupdate': autoupdate, } # Set locale in Translate link if project and locales_selected: locale = utils.get_project_locale_from_request( request, project.locales) or locales_selected[0].code if locale: data['translate_locale'] = locale if Resource.objects.filter(project=project).exists(): data['ready'] = True return render(request, template, data)