From 40fde99d151fbea70bbaa041debc95dff5677240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Mart=C3=ADn?= Date: Thu, 10 Sep 2015 21:28:16 +0200 Subject: [PATCH] Changed AmiiboShop to M2M so we can use the same item for more amiibo --- amiibofindr/apps/amiibo/admin.py | 7 ++- .../migrations/0030_auto_20150910_2116.py | 45 +++++++++++++++++++ .../amiibo/migrations/0031_english_names.py | 23 ++++++++++ amiibofindr/apps/amiibo/models.py | 4 +- 4 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 amiibofindr/apps/amiibo/migrations/0030_auto_20150910_2116.py create mode 100644 amiibofindr/apps/amiibo/migrations/0031_english_names.py diff --git a/amiibofindr/apps/amiibo/admin.py b/amiibofindr/apps/amiibo/admin.py index a7b5fa8..ae8a794 100644 --- a/amiibofindr/apps/amiibo/admin.py +++ b/amiibofindr/apps/amiibo/admin.py @@ -86,10 +86,13 @@ class AmiiboCardAdmin(ImportExportModelAdmin, reversion.VersionAdmin): class AmiiboShopAdmin(ImportExportModelAdmin, reversion.VersionAdmin): resource_class = AmiiboShopResource - list_display = ('amiibo', 'shop', 'check_price') - list_filter = ('amiibo', 'shop', ) + list_display = ('amiibos_names', 'shop_name', 'shop', 'check_price') + list_filter = ('shop', 'shop_name', ) list_editable = ('check_price', ) + def amiibos_names(self, obj): + return ", ".join(obj.amiibo.all().values_list('name_eu', flat=True)) + class AmiiboPriceAdmin(reversion.VersionAdmin): pass diff --git a/amiibofindr/apps/amiibo/migrations/0030_auto_20150910_2116.py b/amiibofindr/apps/amiibo/migrations/0030_auto_20150910_2116.py new file mode 100644 index 0000000..4d396bf --- /dev/null +++ b/amiibofindr/apps/amiibo/migrations/0030_auto_20150910_2116.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from django.db import models, migrations + + +BACKUP = {} + + +def backup(apps, schema_editor): + AmiiboShop = apps.get_model("amiibo", "AmiiboShop") + for shop in AmiiboShop.objects.all(): + BACKUP[shop.pk] = { + 'amiibo_id': shop.amiibo_id, + } + +def restore(apps, schema_editor): + AmiiboShop = apps.get_model("amiibo", "AmiiboShop") + Amiibo = apps.get_model("amiibo", "Amiibo") + for pk, info in BACKUP.items(): + a = AmiiboShop.objects.get(pk=pk) + a.amiibo.add(Amiibo.objects.get(pk=int(info['amiibo_id']))) + a.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('amiibo', '0029_amiiboshop_shop_name'), + ] + + operations = [ + migrations.RunPython(backup), + migrations.RemoveField( + model_name='amiiboshop', + name='amiibo', + ), + migrations.AddField( + model_name='amiiboshop', + name='amiibo', + field=models.ManyToManyField(related_name='shops_set', to='amiibo.Amiibo'), + ), + migrations.RunPython(restore), + ] diff --git a/amiibofindr/apps/amiibo/migrations/0031_english_names.py b/amiibofindr/apps/amiibo/migrations/0031_english_names.py new file mode 100644 index 0000000..4fc7f74 --- /dev/null +++ b/amiibofindr/apps/amiibo/migrations/0031_english_names.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from django.db import migrations + + +def convert(apps, schema_editor): + Amiibo = apps.get_model("amiibo", "Amiibo") + for amiibo in Amiibo.objects.all(): + amiibo.name_en = amiibo.name_eu + amiibo.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('amiibo', '0030_auto_20150910_2116'), + ] + + operations = [ + migrations.RunPython(convert), + ] diff --git a/amiibofindr/apps/amiibo/models.py b/amiibofindr/apps/amiibo/models.py index 3b5bef1..d4dfc31 100644 --- a/amiibofindr/apps/amiibo/models.py +++ b/amiibofindr/apps/amiibo/models.py @@ -237,7 +237,7 @@ class AmiiboShop(models.Model): (PACK, 'Pack'), ) - amiibo = models.ForeignKey(Amiibo, related_name='shops_set') + amiibo = models.ManyToManyField(Amiibo, related_name='shops_set') shop = models.ForeignKey('shop.Shop', related_name='amiibos_set') type = models.CharField(choices=ITEM_TYPES, default=FIGURE, max_length=1) url = models.TextField() @@ -276,7 +276,7 @@ class AmiiboShop(models.Model): return self.type == self.PACK def __unicode__(self): - return u'{} in {}'.format(self.amiibo.name, self.shop.name) + return u'{} in {}'.format(self.amiibo.count(), self.shop.name) class AmiiboPrice(models.Model):