diff --git a/assets/management/commands/generateSampleAssetsData.py b/assets/management/commands/generateSampleAssetsData.py index 0e01a6cc..49e709ab 100644 --- a/assets/management/commands/generateSampleAssetsData.py +++ b/assets/management/commands/generateSampleAssetsData.py @@ -2,6 +2,7 @@ import random from django.core.management.base import BaseCommand, CommandError from django.db import transaction +from django.db.utils import IntegrityError from django.utils import timezone from reversion import revisions as reversion @@ -125,5 +126,9 @@ class Command(BaseCommand): if i % 3 == 0: asset.purchased_from = random.choice(self.suppliers) - asset.clean() - asset.save() + with transaction.atomic(): + try: + asset.clean() + asset.save() + except IntegrityError: + pass diff --git a/assets/models.py b/assets/models.py index bb51eae2..2ee3c724 100644 --- a/assets/models.py +++ b/assets/models.py @@ -100,6 +100,11 @@ class AssetManager(models.Manager): return qs +def get_available_asset_id(wanted_prefix=""): + last_asset = Asset.objects.filter(asset_id_prefix=wanted_prefix).last() + return 9000 if last_asset is None else wanted_prefix + str(last_asset.asset_id_number + 1) + + @reversion.register class Asset(models.Model, RevisionMixin): parent = models.ForeignKey(to='self', related_name='asset_parent', diff --git a/assets/views.py b/assets/views.py index d9541574..2c0b78a4 100644 --- a/assets/views.py +++ b/assets/views.py @@ -151,8 +151,7 @@ class AssetCreate(LoginRequiredMixin, generic.CreateView): def get_initial(self, *args, **kwargs): initial = super().get_initial(*args, **kwargs) - last_asset = self.model.objects.filter(asset_id_prefix="").last() - initial["asset_id"] = 9000 if last_asset is None else str(last_asset.asset_id_number + 1) + initial["asset_id"] = models.get_available_asset_id() return initial def get_success_url(self): @@ -169,9 +168,7 @@ class DuplicateMixin: class AssetDuplicate(DuplicateMixin, AssetIDUrlMixin, AssetCreate): def get_initial(self, *args, **kwargs): initial = super().get_initial(*args, **kwargs) - prefix = self.get_object().asset_id_prefix - last_asset = self.model.objects.filter(asset_id_prefix=prefix).last() - initial["asset_id"] = 9000 if last_asset is None else prefix + str(last_asset.asset_id_number + 1) + initial["asset_id"] = models.get_available_asset_id(wanted_prefix=self.get_object().asset_id_prefix) return initial def get_context_data(self, **kwargs):