def post(self, request): """ Procesa el formulario :param request: objeto HttpRequest :return: HttpResponse con la respuesta """ publication = Publication() publication.publisher = request.user form = PublicationForm(request.POST, request.FILES, instance=publication) if form.is_valid(): # Guardar el anuncio new_publication = form.save() # Limpiar el formulario form = PublicationForm() # Devolvemos un mensaje de OK messages.success(request, 'Publicación creada correctamente') context = {'form': form, 'navbar': "publication-form"} return render(request, 'publications/publication_form.html', context)
def publications(request): form = PublicationForm() # num = custom_paginator(paginator.num_pages) if request.method == "POST": form = PublicationForm(request.POST, request.FILES) if form.is_valid(): data = form.cleaned_data Publication.objects.create(title=data.get("title"), body=data.get("body"), image=data.get("image"), author=request.user) publications = Publication.objects.all() paginator = Paginator(publications, 10) page = request.GET.get('page') try: publications = paginator.page(page) except PageNotAnInteger: publications = paginator.page(1) except EmptyPage: publications = paginator.page(paginator.num_pages) return render(request, "publications.html", { "publications": publications, "form": form })
def profile_add_publication(request, username): current_user = get_object_or_404(User, username=username) if request.method == 'POST': form = PublicationForm(request.POST) if form.is_valid(): publication = form.save() publication.title_ru = form.cleaned_data['title'] publication.save() authors = form.cleaned_data['authors_order'] conference = form.cleaned_data['conference_author'] unique_authors = [] unique_authors_obj = [] for obj in authors: try: if not obj['author'] in unique_authors: unique_authors.append(obj['author']) unique_authors_obj.append(obj) except KeyError: pass for obj in unique_authors_obj: try: if not obj['DELETE']: AuthorPublication.objects.create( publication=publication, author=obj['author'], order_by=obj['order_by']) except KeyError: break if conference: try: conference = conference[0] if not conference['DELETE']: form = conference['form'] author = conference['author'] Conference.objects.create(publication=publication, author=author, form=form) except (KeyError, IndexError): pass return redirect(profile, current_user) else: form = PublicationForm() form.fields['authors_order'].template_context = { "profile": current_user } form.fields['conference_author'].template_context = { "profile": current_user } context = {'form': form, 'profile': current_user} return render(request, 'lmnad/profile_add_publication.html', context)
def get(self, request): """ Muestra el formulario :param request: objeto HttpRequest :return: HttpResponse con la respuesta """ form = PublicationForm() context = {'form': form, 'navbar': "publication-form"} return render(request, 'publications/publication_form.html', context)
def parse_bibtex(self, entry, bibtex_str, instance): authors = [] for a in entry.get('author', '').split(' and '): parts = a.split(' ') fields = ['given', 'family'] authors.append({k: v for k, v in zip(fields, parts)}) entry['author'] = authors entry['type'] = entry.get('type', entry['ENTRYTYPE']) entry['bibtex'] = bibtex_str if entry.get('owner'): del entry['owner'] pubform = PublicationForm(entry, instance=instance) if pubform.is_valid(): pubform.save() return pubform.instance.pk else: print('Submission invalid') print(pubform.errors)
def save_from_crossref(self, request, doi, instance=None, update=False): qs = self.get_queryset(request).filter(DOI=doi) if not qs.exists() or update: try: response = cr.works(doi) except Exception as e: print(e) return None entry = { k.replace('-', '_'): v for k, v in response['message'].items() if k.replace('-', '_') in [f.name for f in Publication._meta.fields] + ['author'] } entry['bibtex'] = self.get_bibtex(doi) pubform = PublicationForm(entry, instance=instance) if pubform.is_valid(): pubform.save() return pubform.instance.pk else: print('Submission invalid') print(pubform.errors)
def profile_edit_publication(request, username, id): current_user = get_object_or_404(User, username=username) publication = get_object_or_404(Publication, id=id) conference = None if request.method == 'POST': form = PublicationForm(request.POST, instance=publication) if form.is_valid(): publication.title_ru = form.cleaned_data['title'] publication.save() authors = form.cleaned_data['authors_order'] conference = form.cleaned_data['conference_author'] # delete old author publication link AuthorPublication.objects.filter(publication=publication).delete() unique_authors = [] unique_authors_obj = [] for obj in authors: try: if not obj['author'] in unique_authors: unique_authors.append(obj['author']) unique_authors_obj.append(obj) except KeyError: pass # create new for obj in unique_authors_obj: try: if not obj['DELETE']: AuthorPublication.objects.create( publication=publication, author=obj['author'], order_by=obj['order_by']) except KeyError: break if conference: try: conference = conference[0] if conference['DELETE']: publication.conference.delete() else: publication.conference.form = conference['form'] publication.conference.author = conference['author'] publication.conference.save() except (KeyError, IndexError): pass return redirect(profile, current_user) else: existed_authors = [] for a in publication.authors.all(): try: pub_author = AuthorPublication.objects.get( publication=publication, author=a) except (AuthorPublication.DoesNotExist, AuthorPublication.MultipleObjectsReturned): pub_author = AuthorPublication.objects.filter( publication=publication, author=a).first() order_by = pub_author.order_by author = { 'order_by': order_by, 'author': a, } existed_authors.append(author) try: if publication.conference.author: conference = { 'form': publication.conference.form, 'author': publication.conference.author } except Conference.DoesNotExist: conference = None form = PublicationForm(instance=publication) # set init values for inlines form if existed_authors: form.fields['authors_order'].formset_class_attrs = { "initial": existed_authors } form.fields['authors_order'].template_context = { "profile": current_user } if conference: form.fields['conference_author'].formset_class_attrs = { "initial": [conference] } form.fields['conference_author'].template_context = { "profile": current_user } context = {'form': form, 'profile': current_user} return render(request, 'lmnad/profile_edit_publication.html', context)