def post(self, request): post = Post() form = PostForm(request.POST, instance=post) try: author_blog = Blog.objects.get(user=request.user) # Asignamos el post al blog del usuario autenticado post.blog = author_blog if form.is_valid(): post = form.save() form = PostForm() url = reverse("post_detail_page", args=[request.user, post.pk]) message = "¡Post creado con éxito!" message += mark_safe('<a href={0}> Ver post </a>'.format(url)) messages.success(request, message) except ObjectDoesNotExist: messages.add_message( request, messages.ERROR, "Este usuario no dispone de un blog asociado. Consulte con el administrador" ) form = PostForm() return render(request, "post_form.html", {'form': form})
def post(self, request): success_message = "" blogs_list = Blog.objects.filter(owner__username__exact=request.user.username) if len(blogs_list) == 1: post_in_blog = Post() post_in_blog.blog = blogs_list[0] # asigno como propietario de la foto el usuario autenticado form = PostForm( request.POST, instance=post_in_blog ) # basa la instancia de la petición en la que yo te paso. Mezcla campos!! if form.is_valid(): new_post = form.save() # Crea, guarda y devuelve el objeto form = PostForm() # lo inicializamos tras guardar para que aparezca vacío de nuevo # Creamos nuestro mensaje de éxito con el link a la foto success_message = "Guardado con éxito!!" success_message += '<a href="{0}">'.format( reverse("post_detail", args=[request.user.username, new_post.pk]) ) success_message += "See post" success_message += "</a>" context = {"form": form, "success_message": success_message} return render(request, "blogs/new_post.html", context) else: return HttpResponseNotFound("Houston, we have a problem")
def create(self, validated_data): user_id = self.context.get("user_id") category_ids = self.context.get("category") categories = [] if category_ids != ['']: categories = Category.objects.filter(id__in=category_ids) user = User.objects.get(id=user_id) post = Post(**validated_data) post.blog = self.get_user_blog(user) post.save() for cat in categories: post.category.add(cat) post.save() return post
def post(self, request): post = Post() post.user = request.user post.blog = request.user.blog form = PostForm(request.POST, instance=post) if form.is_valid(): post = form.save() #vaciamos el formulario form = PostForm() url = reverse("post_detail", args=[post.user,post.pk]) #reverse genera url pasandole el tipo de URL message = " created successfully!" message += '<a href="{0}">Create your first post</a>'.format(url) #enviamos mensaje de exito con un enlace a la pelicula que acabamos de cr messages.success(request, message) return render(request, "post_form.html", {'form':form})
def post(self, request): """ Crea un post en base a la información POST. Con el decorador @login_required() nos va a ejecutar esta función solamente en el caso de que el usuario esté autenticado. En caso contrario, redirigirá a una url del paquete django.contrib.auth que redefinimos en el settings.py LOGIN_URL. Esta es la magia que hace Django para redireccionar al usuario a una url en el caso de que intente acceder a una url protegida sólo accesible si está autenticado. :param request: Objeto HttpRequest con la petición :return: HttpResponse """ success_message = '' # Creo un post vacío y le asigno el blog actual. post_with_blog = Post() post_with_blog.blog = request.user.blog # Le pedimos al formulario que en vez de usar la instancia que él crea, utilice la que le # indicamos con el post_with_blog. Con esto, guarda la instancia con todos los campos del # formulario, excepto del blog, que coge el que le indicamos nosotros que ha sido creado. form = PostForm(request.POST, instance=post_with_blog) if form.is_valid(): # Si se valida correctamente creamos objeto post, lo guardamos en DB y lo devolvemos # Obtenemos el blog del usuario autenticado para guardarlo automáticamente. new_post = form.save() # Reiniciamos formulario y componemos mensaje con enlace al nuevo post creado. Para acceder a una url # nombrada en un controlador utilizamos la función reverse, con los argumentos de la url nombrada, en este # caso, el nombre del blog, y la pk del post. # Como por defecto Django escapa el HTML, necesitamos indicar que el enlace al nuevo post no escape HTML. # Lo indicamos en la plantilla con el |safe en el mensaje. Lo normal es que este trabajo se haga en el # template form = PostForm() success_message = '¡Post creado con éxito! ' success_message += '<a href="{0}">'.format(reverse('post_detail', args=[new_post.blog, new_post.pk])) success_message += 'Ver post' success_message += '</a>' context = { 'form': form, 'success_message': success_message } return self.renderize(request, context)