Skip to content

Commit

Permalink
Saving progress
Browse files Browse the repository at this point in the history
  • Loading branch information
guel-codes committed Jul 6, 2024
1 parent 9fe72a9 commit 24e2d68
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 1 deletion.
48 changes: 47 additions & 1 deletion taggit/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from django.contrib import admin

from django import forms
from django.db import transaction
from taggit.models import Tag, TaggedItem

from django.shortcuts import render, redirect
from .forms import MergeTagsForm


class TaggedItemInline(admin.StackedInline):
model = TaggedItem
Expand All @@ -14,3 +18,45 @@ class TagAdmin(admin.ModelAdmin):
ordering = ["name", "slug"]
search_fields = ["name"]
prepopulated_fields = {"slug": ["name"]}
actions = ["merge_tags"]

def merge_tags(self, request, queryset):
print("🚀 merge_tags called")
print(f"Request method: ✅ {queryset}")
print(f"Request POST data: 😊{request.POST}")

if request.method == "POST" and "csrfmiddlewaretoken" in request.POST:
form = MergeTagsForm(request.POST)
if request.method == "POST":
print("✅", "after form submission")
new_tag_name = "fruit" # hard coded value of the new tag
new_tag, created = Tag.objects.get_or_create(name=new_tag_name)
with transaction.atomic():
for tag in queryset:
for tagged_item in tag.taggit_taggeditem_items.all():
tagged_item.tag = new_tag
tagged_item.save()
# tag.delete() #we can uncomment this to also remove the selected tags

self.message_user(request, "Tags merged successfully.")
return redirect(request.get_full_path())
else:
print(f"Form errors: {form.errors}")
self.message_user(request, "Form is invalid.", level="error")
else:
form = MergeTagsForm()

context = {
"title": "Merge selected tags into a new tag",
"form": form,
"action_checkbox_name": admin.helpers.ACTION_CHECKBOX_NAME,
"queryset": queryset,
}

return render(
request,
"admin/taggit/merge_tags_form.html",
context,
)

merge_tags.short_description = "Merge selected tags"
8 changes: 8 additions & 0 deletions taggit/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,11 @@ def has_changed(self, initial_value, data_value):
initial_value.sort()

return initial_value != data_value


class MergeTagsForm(forms.Form):
new_tag_name = forms.CharField(
label="New Tag Name",
max_length=255,
widget=forms.TextInput(attrs={"id": "id_new_tag_name"}),
)
29 changes: 29 additions & 0 deletions taggit/templates/admin/taggit/merge_tags_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls %}

{% block title %}{% trans 'Django site admin' %}{% endblock %}

{% block content %}
<div class="module">
<form method="post" id="merge-tags-form">
{% csrf_token %}
{% for field in form %}
<div class="form-row">
{{ field.label_tag }}
{{ field }}
{% if field.errors %}
<ul class="errorlist">
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endfor %}
<div class="submit-row">
<!-- <input type="submit" value="Merge Tags" name="apply_merge" /> -->
<button type="submit" class="button">Merge Tags</button>
</div>
</form>
</div>
{% endblock %}

0 comments on commit 24e2d68

Please sign in to comment.