def post_edit_view(request, id): # Es obligatorio estar loguerdo if not request.user.is_authenticated: messages.error(request, 'Es necesario estar autenticado para editar posts') return redirect('blog:index') # Es obligatorio ser editor para tocar un post if not request.user.userprofile.author: messages.error(request, u'No está autorizado para editar posts') return redirect('blog:index') # Se obtiene el post a editar y si no existe se redirige al index try: post = Post.objects.get(id=id) except ObjectDoesNotExist: messages.error(request, 'El post indicado no existe') return redirect('blog:index') # Sólo se pueden editar posts propios if request.user != post.author.user: messages.error(request, u'Sólo pueden editarse los posts propios') return redirect('blog:index') # Si llega hasta aquí se puede continuar form = PostFormEdit(request.POST or None, request.FILES or None, instance=post) if request.method == 'POST': # Está correcta la información del form? if form.is_valid(): status_old = post.status post = form.save(commit=False) post.slug = slugify(post.title) # Sólo si se selecciona una nueva imagen de cabecera se borra la antigua y se asigna la nueva if form.cleaned_data['image_file']: post.image.delete() image = Image() image.caption = form.cleaned_data['image_file'].name image.image = form.cleaned_data['image_file'] image.post_slug = post.id image.save() post.image = image # Se graban los cambios del post, para poder seguir con el resto de datos post.save() post.add_log(request.user, "edit") # Si ha pasado a status publicado en este momento se actualizan los contadores del archivo if status_old != 'PB' and post.status == 'PB': try: post_archive = PostArchive.objects.get(year=post.published_date.year, month=post.published_date.month) post_archive.posts += 1 post_archive.save(force_update=True) except ObjectDoesNotExist: post_archive = PostArchive() post_archive.year = post.published_date.year post_archive.month = post.published_date.month post_archive.posts = 1 post_archive.save() # Se borran las categorías a las que estuviese asignado el post antteriormente y se crean y asocian # las nuevas categorías asignadas al post al editarlo for postC in PostCategory.objects.filter(post=post): postC.delete() for category in form.cleaned_data['postcategory']: post_category = PostCategory() post_category.post = post post_category.category = apps.get_model('category', 'Category').objects.get(id=category) post_category.save() # Sólo si se han asignado nuevas imagenes al post se borran las antiguas y se asignan las nuevas if len(form.cleaned_data['postimage']) > 0: for image in PostImage.objects.filter(post=post): image.delete() for file_image in form.cleaned_data['postimage']: image = Image() image.caption = file_image.name image.image = file_image image.post_slug = post.id image.save() post_image = PostImage() post_image.post = post post_image.image = image post_image.save() # Sólo si se han asignado nuevasss imagenes small al post se borran las antiguas y se asignan las nuevas if len(form.cleaned_data['postimagesmall']) > 0: for image_sm in PostImageSmall.objects.filter(post=post): image_sm.delete() for file_image_sm in form.cleaned_data['postimagesmall']: image_sm = Image() image_sm.caption = file_image_sm.name image_sm.image = file_image_sm image_sm.post_slug = post.id image_sm.save() post_image_sm = PostImageSmall() post_image_sm.post = post post_image_sm.image = image_sm post_image_sm.save() # Datos grabados y se redirige al index messages.success(request, 'Post editado correctamente') return redirect('blog:index') # Se genera el contexto y se renderiza context = { 'title': 'Edit post', 'post': post, 'form': form, } return render(request, 'post_form.html', context)
def post_create_view(request): # Es obligatorio estar loguedo if not request.user.is_authenticated: messages.error(request, 'Es necesario estar autenticado para crear posts') return redirect('blog:index') # Es obligatorio ser editor para crear un post if not request.user.userprofile.author: messages.error(request, u'No está autorizado para crear posts') return redirect('blog:index') # Se ha hecho SUBMIT en el FORM? if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): # Si se llega hasta aquí es que la información del form es correcta post = form.save(commit=False) post.id = slugify(post.title) # Se genera la imagen de cabecera y se asocia al post image = Image() image.caption = form.cleaned_data['image_file'].name image.post_slug = post.id image.image = form.cleaned_data['image_file'] image.save() post.image = image # El autor del post es el usuario logueado post.author = UserProfile.objects.get(user=request.user) # Se graba el post ya que es necesario para seguir trabajando con los objetos relacionados post.save() post.add_log(request.user, "create") # Se actualiza la tabla de archivo de posts sólo si es un post publicado if post.status == 'PB': try: post_archive = PostArchive.objects.get(year=post.published_date.year, month=post.published_date.month) post_archive.posts += 1 post_archive.save(force_update=True) except ObjectDoesNotExist: post_archive = PostArchive() post_archive.year = post.published_date.year post_archive.month = post.published_date.month post_archive.posts = 1 post_archive.save() # Se graban las categorías a las que está asignado el post for category in form.cleaned_data['postcategory']: post_category = PostCategory() post_category.post = post post_category.category = apps.get_model('category', 'Category').objects.get(id=category) post_category.save() # Se graban las imagenes que se han asignado al post for file_image in form.cleaned_data['postimage']: image = Image() image.caption = file_image.name image.image = file_image image.post_slug = post.id image.save() post_image = PostImage() post_image.post = post post_image.image = image post_image.save() # Se graban las imagenes small que se han asignado al post for file_image_sm in form.cleaned_data['postimagesmall']: image_sm = Image() image_sm.caption = file_image_sm.name image_sm.post_slug = post.id image_sm.image = file_image_sm image_sm.save() post_image_sm = PostImageSmall() post_image_sm.post = post post_image_sm.image = image_sm post_image_sm.save() # Mensaje de OK y se redirige al index messages.success(request, 'Post creado correctamente') return redirect('blog:index') else: # No es un SUBMIT, en ese caso se genera un form vacio form = PostForm() # Se genera el contexto y se renderiza context = { 'title': 'Create post', 'form': form, } return render(request, 'post_form.html', context)