From 7067e318d80201f1b6582fef6bf4079c8d2e3932 Mon Sep 17 00:00:00 2001 From: Tobias Megies Date: Fri, 29 Apr 2016 12:24:53 +0200 Subject: [PATCH 1/5] enable registering multiple plugins with same name by enumerating index field and adding it to the unique key --- djangoplugins/management/commands/syncplugins.py | 3 ++- djangoplugins/models.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/djangoplugins/management/commands/syncplugins.py b/djangoplugins/management/commands/syncplugins.py index dc475a1..178daf6 100644 --- a/djangoplugins/management/commands/syncplugins.py +++ b/djangoplugins/management/commands/syncplugins.py @@ -107,9 +107,10 @@ def plugins(self, point, point_inst): src = self.get_classes_dict(point.plugins) dst = self.get_instances_dict(point_inst.plugin_set.all()) - for plugin, inst in self.available(src, dst, Plugin): + for _i, (plugin, inst) in enumerate(self.available(src, dst, Plugin)): inst.point = point_inst inst.name = getattr(plugin, 'name', None) + inst.index = _i if hasattr(plugin, 'title'): inst.title = six.text_type(getattr(plugin, 'title')) inst.save() diff --git a/djangoplugins/models.py b/djangoplugins/models.py index d0fbd94..d6bb181 100644 --- a/djangoplugins/models.py +++ b/djangoplugins/models.py @@ -85,7 +85,7 @@ class Plugin(DirtyFieldsMixin, models.Model): objects = PluginManager() class Meta: - unique_together = (("point", "name"),) + unique_together = (("point", "name", "index"),) ordering = ('index', 'id') def __str__(self): From 31ae95530134e27cda26fa57ac1022fde78005c4 Mon Sep 17 00:00:00 2001 From: Tobias Megies Date: Mon, 8 May 2017 22:12:08 +0200 Subject: [PATCH 2/5] add index to allow multiple plugins with same name in initial migration --- djangoplugins/migrations/0001_initial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djangoplugins/migrations/0001_initial.py b/djangoplugins/migrations/0001_initial.py index 0c3aacd..d137a1e 100644 --- a/djangoplugins/migrations/0001_initial.py +++ b/djangoplugins/migrations/0001_initial.py @@ -42,6 +42,6 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='plugin', - unique_together=set([('point', 'name')]), + unique_together=set([('point', 'name', 'index')]), ), ] From e1850836384af4eb92d882653ade43e3adf23fbe Mon Sep 17 00:00:00 2001 From: Tobias Megies Date: Fri, 31 Jan 2020 14:02:48 +0100 Subject: [PATCH 3/5] make it a proper separate migration so existing installations can be updated properly --- djangoplugins/migrations/0001_initial.py | 2 +- .../migrations/0002_add_id_to_plugins_uniq.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 djangoplugins/migrations/0002_add_id_to_plugins_uniq.py diff --git a/djangoplugins/migrations/0001_initial.py b/djangoplugins/migrations/0001_initial.py index d137a1e..0c3aacd 100644 --- a/djangoplugins/migrations/0001_initial.py +++ b/djangoplugins/migrations/0001_initial.py @@ -42,6 +42,6 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='plugin', - unique_together=set([('point', 'name', 'index')]), + unique_together=set([('point', 'name')]), ), ] diff --git a/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py b/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py new file mode 100644 index 0000000..0faebcc --- /dev/null +++ b/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models +import dirtyfields.dirtyfields + + +class Migration(migrations.Migration): + + dependencies = [ + ('djangoplugins', '0001_initial'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='plugin', + unique_together=set([('point', 'name', 'index')]), + ), + ] From 7e2ed90fa884c4ca74f9d3d7f1e7068b9c60f3b1 Mon Sep 17 00:00:00 2001 From: Tobias Megies Date: Fri, 31 Jan 2020 14:06:18 +0100 Subject: [PATCH 4/5] djangoplugins uniq constraint: use id instead of index was getting error messages about duplicate keys, looks like the id counter is automatically incremented as a uniq field but that index field might not be as a plain integer field (not handled by postgres at all?) --- djangoplugins/management/commands/syncplugins.py | 4 ++-- djangoplugins/migrations/0002_add_id_to_plugins_uniq.py | 2 +- djangoplugins/models.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/djangoplugins/management/commands/syncplugins.py b/djangoplugins/management/commands/syncplugins.py index 178daf6..d346a53 100644 --- a/djangoplugins/management/commands/syncplugins.py +++ b/djangoplugins/management/commands/syncplugins.py @@ -107,10 +107,10 @@ def plugins(self, point, point_inst): src = self.get_classes_dict(point.plugins) dst = self.get_instances_dict(point_inst.plugin_set.all()) - for _i, (plugin, inst) in enumerate(self.available(src, dst, Plugin)): + for plugin, inst in self.available(src, dst, Plugin): inst.point = point_inst inst.name = getattr(plugin, 'name', None) - inst.index = _i + inst.id = getattr(plugin, 'id') if hasattr(plugin, 'title'): inst.title = six.text_type(getattr(plugin, 'title')) inst.save() diff --git a/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py b/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py index 0faebcc..2bdd5ee 100644 --- a/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py +++ b/djangoplugins/migrations/0002_add_id_to_plugins_uniq.py @@ -14,6 +14,6 @@ class Migration(migrations.Migration): operations = [ migrations.AlterUniqueTogether( name='plugin', - unique_together=set([('point', 'name', 'index')]), + unique_together=set([('point', 'name', 'id')]), ), ] diff --git a/djangoplugins/models.py b/djangoplugins/models.py index d6bb181..b8cbc01 100644 --- a/djangoplugins/models.py +++ b/djangoplugins/models.py @@ -85,7 +85,7 @@ class Plugin(DirtyFieldsMixin, models.Model): objects = PluginManager() class Meta: - unique_together = (("point", "name", "index"),) + unique_together = (("point", "name", "id"),) ordering = ('index', 'id') def __str__(self): From f38b6c69ff6ad1851777719f358fd5df3644d6bb Mon Sep 17 00:00:00 2001 From: Tobias Megies Date: Fri, 31 Jan 2020 14:51:42 +0100 Subject: [PATCH 5/5] remove.. might not be needed? --- djangoplugins/management/commands/syncplugins.py | 1 - 1 file changed, 1 deletion(-) diff --git a/djangoplugins/management/commands/syncplugins.py b/djangoplugins/management/commands/syncplugins.py index d346a53..dc475a1 100644 --- a/djangoplugins/management/commands/syncplugins.py +++ b/djangoplugins/management/commands/syncplugins.py @@ -110,7 +110,6 @@ def plugins(self, point, point_inst): for plugin, inst in self.available(src, dst, Plugin): inst.point = point_inst inst.name = getattr(plugin, 'name', None) - inst.id = getattr(plugin, 'id') if hasattr(plugin, 'title'): inst.title = six.text_type(getattr(plugin, 'title')) inst.save()