Add a migration script to fix duplicated categories during database setup
This commit is contained in:
parent
8cd891ad3a
commit
305136d963
@ -0,0 +1,44 @@
|
||||
# Generated by Django 4.2.9 on 2024-11-11 10:15
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def remove_duplicated_categories(apps, schema_editor):
|
||||
Category = apps.get_model("agenda_culturel", "Category")
|
||||
CategorisationRule = apps.get_model("agenda_culturel", "CategorisationRule")
|
||||
Event = apps.get_model("agenda_culturel", "Event")
|
||||
|
||||
|
||||
catnames = list(set([c.name for c in Category.objects.all()]))
|
||||
|
||||
# for each category name
|
||||
for cname in catnames:
|
||||
# check if it exists more than one category
|
||||
if Category.objects.filter(name=cname).count() > 1:
|
||||
cats = Category.objects.filter(name=cname).order_by("pk")
|
||||
nbs = [Event.objects.filter(category=c).count() + CategorisationRule.objects.filter(category=c).count() for c in cats]
|
||||
|
||||
# if only one category with this name has elements
|
||||
if len([n for n in nbs if n != 0]) == 1:
|
||||
# remove all categories without elements
|
||||
for n, c in zip(nbs, cats):
|
||||
if n == 0:
|
||||
c.delete()
|
||||
else:
|
||||
# otherwise, remove all but the last one (by ID)
|
||||
for c in cats[0:-1]:
|
||||
c.delete()
|
||||
|
||||
|
||||
def do_nothing(apps, schema_editor):
|
||||
pass
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('agenda_culturel', '0107_strip_aliases'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(remove_duplicated_categories, reverse_code=do_nothing)
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user