示例#1
0
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)
示例#2
0
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)