diff --git a/localized_fields/fields/uniqueslug_field.py b/localized_fields/fields/uniqueslug_field.py index ab4cd30..ecfbafd 100644 --- a/localized_fields/fields/uniqueslug_field.py +++ b/localized_fields/fields/uniqueslug_field.py @@ -91,11 +91,12 @@ class LocalizedUniqueSlugField(LocalizedAutoSlugField): if self.include_time: slug += '-%d' % datetime.now().microsecond - if instance.retries > 0: + retries = getattr(instance, 'retries', 0) + if retries > 0: # do not add another - if we already added time if not self.include_time: slug += '-' - slug += '%d' % instance.retries + slug += '%d' % retries slugs.set(lang_code, slug) diff --git a/tests/test_bulk.py b/tests/test_bulk.py index 5459759..5dcd1ef 100644 --- a/tests/test_bulk.py +++ b/tests/test_bulk.py @@ -4,7 +4,7 @@ from django.db import models from django.conf import settings from django.test import TestCase -from localized_fields.fields import LocalizedField +from localized_fields.fields import LocalizedField, LocalizedUniqueSlugField from .data import get_init_values from .fake_model import get_fake_model @@ -16,6 +16,9 @@ class LocalizedBulkTestCase(TestCase): @staticmethod def test_localized_bulk_insert(): + """Tests that bulk inserts work properly when using + a :see:LocalizedField in the model.""" + model = get_fake_model( 'BulkInsertModel', { @@ -31,3 +34,25 @@ class LocalizedBulkTestCase(TestCase): ]) assert model.objects.all().count() == 3 + + @staticmethod + def test_localized_slug_bulk_insert(): + """Tests whether bulk inserts work properly when using + a :see:LocalizedUniqueSlugField in the model.""" + + model = get_fake_model( + 'BulkSlugInsertModel', + { + 'name': LocalizedField(), + 'slug': LocalizedUniqueSlugField(populate_from='name', include_time=True), + 'score': models.IntegerField() + } + ) + + objects = model.objects.bulk_create([ + model(name={'en': 'english name 1', 'ro': 'romanian name 1'}, score=1), + model(name={'en': 'english name 2', 'ro': 'romanian name 2'}, score=2), + model(name={'en': 'english name 3', 'ro': 'romanian name 3'}, score=3) + ]) + + assert model.objects.all().count() == 3