From 86099bb4ae4b5aa6ef1bab9633bf92e2b5252c29 Mon Sep 17 00:00:00 2001 From: Bobby Date: Fri, 10 Mar 2023 20:48:22 -0500 Subject: Tagging fix for admin side with multi select --- blog/models.py | 10 ++++++++++ blog_admin/views.py | 22 ++++++++++++---------- templates/blog_admin/new_post.html | 33 +++++++++++++++++++++------------ 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/blog/models.py b/blog/models.py index 1d273b5d..1618f60b 100644 --- a/blog/models.py +++ b/blog/models.py @@ -10,6 +10,11 @@ class Category(models.Model): description = models.TextField(blank=True) created_at = models.DateTimeField(auto_now_add=True) + def save(self, *args, **kwargs): + if not self.slug or self.slug == '': + self.slug = slugify(self.name) + return super(Category, self).save(*args, **kwargs) + def __str__(self): return self.name @@ -19,6 +24,11 @@ class Tag(models.Model): description = models.TextField(blank=True) created_at = models.DateTimeField(auto_now_add=True) + def save(self, *args, **kwargs): + if not self.slug or self.slug == '': + self.slug = slugify(self.name) + return super(Tag, self).save(*args, **kwargs) + def __str__(self): return self.name diff --git a/blog_admin/views.py b/blog_admin/views.py index 29b1f0aa..49e309a3 100644 --- a/blog_admin/views.py +++ b/blog_admin/views.py @@ -36,12 +36,16 @@ def posts_search(request): def new_post(request): if request.user.is_authenticated and (request.user.is_superuser or request.user.is_staff): categories = Category.objects.all() + all_tags = [tag.name for tag in Tag.objects.all()] if request.method == 'POST': title = request.POST.get('title') category = request.POST.get('category') - tags = request.POST.get('tags') + tags = request.POST.getlist('tags') slug = request.POST.get('slug') if request.POST.get('slug') else '' post_image = request.FILES['post_image'] if 'post_image' in request.FILES else None + additional_tags = request.POST.get('additional_tags') if request.POST.get('additional_tags') else '' + if additional_tags: + tags += additional_tags.split(',') if request.POST.get('post_id'): # update post @@ -52,7 +56,7 @@ def new_post(request): post.title = title post.category = Category.objects.get(id = category) post.slug = slug - post.tags.set([Tag.objects.get_or_create(slug = tag.strip(), name = tag.strip())[0] for tag in tags.split(',')]) + post.tags.set([Tag.objects.get_or_create(name = tag.strip())[0] for tag in tags]) if post_image: post.post_image = post_image post.save() @@ -64,13 +68,13 @@ def new_post(request): else: if not title or not category or not tags or not post_image: messages.error(request, 'Fields marked with asterisk (*) are required.', extra_tags='new_post_message') - return_object = { 'title_value': title, 'category_value': category, 'tags_value': tags, 'slug_value': slug, 'post_image_value': post_image } + return_object = { 'title_value': title, 'category_value': category, 'tags_value': tags, 'slug_value': slug, 'post_image_value': post_image, 'all_tags': all_tags } return render(request, 'blog_admin/new_post.html', { 'title': 'New Post', 'categories': categories, 'return_object': return_object }) else: # create new post try: post = Post.objects.create(title = title, category = Category.objects.get(id = category), slug = slug, author = request.user, post_image = post_image) - post.tags.set([Tag.objects.get_or_create(slug = tag.strip(), name = tag.strip())[0] for tag in tags.split(',')]) + post.tags.set([Tag.objects.get_or_create(name = tag.strip())[0] for tag in tags]) post.save() return redirect(reverse('blog-admin:edit-post', kwargs = { 'slug': post.slug })) except Exception as e: @@ -86,13 +90,11 @@ def new_post(request): post_id = None mode = 'new' if mode == 'edit' and post_id: - post_tags = post.tags.all() - post_tags = [tag.name for tag in post_tags] - post_tags = ', '.join(post_tags) - post = { 'id': post.id, 'title': post.title, 'category': post.category.id, 'tags': post_tags, 'slug': post.slug, 'post_image': post.post_image } - return render(request, 'blog_admin/new_post.html', { 'title': 'Edit Post', 'categories': categories, 'post': post }) + post_tags = [tag.name for tag in post.tags.all()] + post = { 'id': post.id, 'title': post.title, 'category': post.category.id, 'tags': post_tags, 'slug': post.slug, 'post_image': post.post_image, 'all_tags': all_tags } + return render(request, 'blog_admin/new_post.html', { 'title': 'Edit Post', 'categories': categories, 'post': post, 'all_tags': all_tags }) - return render(request, 'blog_admin/new_post.html', { 'title': 'Create New Post', 'categories': categories }) + return render(request, 'blog_admin/new_post.html', { 'title': 'Create New Post', 'categories': categories, 'all_tags': all_tags }) else: return redirect('blog:home') diff --git a/templates/blog_admin/new_post.html b/templates/blog_admin/new_post.html index 4c9cc73c..9984ab9d 100644 --- a/templates/blog_admin/new_post.html +++ b/templates/blog_admin/new_post.html @@ -56,9 +56,18 @@ Tags * - + + + Additional Tags + + + Category * @@ -74,16 +83,16 @@ -- cgit v1.2.3