Skip to content

Commit 76757b5

Browse files
author
Shtarev
committed
Added manager_name feature
1 parent 44c7b4b commit 76757b5

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,6 @@ docs/_build/
5757

5858
# Vim
5959
*.sw[op]
60+
61+
# Pycharm
62+
.idea

autoslug/fields.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ def __init__(self, *args, **kwargs):
207207
# When using model inheritence, set manager to search for matching
208208
# slug values
209209
self.manager = kwargs.pop('manager', None)
210+
self.manager_name = kwargs.pop('manager_name', None)
210211

211212
self.always_update = kwargs.pop('always_update', False)
212213
super(SlugField, self).__init__(*args, **kwargs)
@@ -237,6 +238,9 @@ def deconstruct(self):
237238
if self.manager is not None:
238239
kwargs['manager'] = self.manager
239240

241+
if self.manager_name is not None:
242+
kwargs['manager_name'] = self.manager_name
243+
240244
if self.always_update:
241245
kwargs['always_update'] = self.always_update
242246

@@ -247,7 +251,12 @@ def pre_save(self, instance, add):
247251
# get currently entered slug
248252
value = self.value_from_object(instance)
249253

250-
manager = self.manager
254+
if self.manager is not None:
255+
manager = self.manager
256+
elif self.manager_name is not None:
257+
manager = getattr(self.model, self.manager_name)
258+
else:
259+
manager = None
251260

252261
# autopopulate
253262
if self.always_update or (self.populate_from and not value):

autoslug/tests/models.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from django.db.models import Model, CharField, DateField, ForeignKey, Manager
1+
from django.db.models import Model, CharField, DateField, BooleanField, ForeignKey, Manager
22

33

44
# this app
@@ -27,7 +27,7 @@ class ModelWithUniqueSlugDate(Model):
2727
slug = AutoSlugField(unique_with='date')
2828

2929

30-
class ModelWithUniqueSlugDay(Model): # same as ...Date, just more explicit
30+
class ModelWithUniqueSlugDay(Model): # same as ...Date, just more explicit
3131
date = DateField()
3232
slug = AutoSlugField(unique_with='date__day')
3333

@@ -82,6 +82,8 @@ class ModelWithCustomPrimaryKey(Model):
8282

8383

8484
custom_slugify = lambda value: default_slugify(value).replace('-', '_')
85+
86+
8587
class ModelWithCustomSlugifier(Model):
8688
slug = AutoSlugField(unique=True, slugify=custom_slugify)
8789

@@ -144,3 +146,27 @@ class ModeltranslationOne(Model):
144146
title = CharField(max_length=255)
145147
description = CharField(max_length=255)
146148
slug = AutoSlugField(populate_from='title', always_update=True, unique=True)
149+
150+
151+
class NonDeletedObjects(Manager):
152+
def get_queryset(self):
153+
return super(NonDeletedObjects, self).get_queryset().filter(is_deleted=False)
154+
155+
156+
class AbstractModelWithCustomManager(Model):
157+
is_deleted = BooleanField(default=False)
158+
159+
objects = NonDeletedObjects()
160+
all_objects = Manager()
161+
162+
class Meta:
163+
abstract = True
164+
165+
def delete(self, using=None):
166+
self.is_deleted = True
167+
self.save()
168+
169+
170+
class NonDeletableModelWithUniqueSlug(AbstractModelWithCustomManager):
171+
name = CharField(max_length=200)
172+
slug = AutoSlugField(populate_from='name', unique=True, manager_name='all_objects')

autoslug/tests/tests.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,13 @@ def test_shared_slug_space(self):
234234
b.save()
235235
assert b.slug == u'my-name-2'
236236

237+
def test_autoslug_with_manager_name(self):
238+
a = NonDeletableModelWithUniqueSlug.objects.create(name='My name')
239+
self.assertEqual(a.slug, u'my-name')
240+
a.delete()
241+
b = NonDeletableModelWithUniqueSlug.objects.create(name='My name')
242+
self.assertEqual(b.slug, u'my-name-2')
243+
237244

238245
class AutoSlugModelTranslationTestCase(TestCase):
239246

0 commit comments

Comments
 (0)