Skip to content

Commit

Permalink
Merge 76757b5 into 44c7b4b
Browse files Browse the repository at this point in the history
  • Loading branch information
trollknurr committed Oct 15, 2015
2 parents 44c7b4b + 76757b5 commit d3bf4c2
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 3 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,6 @@ docs/_build/

# Vim
*.sw[op]

# Pycharm
.idea
11 changes: 10 additions & 1 deletion autoslug/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ def __init__(self, *args, **kwargs):
# When using model inheritence, set manager to search for matching
# slug values
self.manager = kwargs.pop('manager', None)
self.manager_name = kwargs.pop('manager_name', None)

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

if self.manager_name is not None:
kwargs['manager_name'] = self.manager_name

if self.always_update:
kwargs['always_update'] = self.always_update

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

manager = self.manager
if self.manager is not None:
manager = self.manager
elif self.manager_name is not None:
manager = getattr(self.model, self.manager_name)
else:
manager = None

# autopopulate
if self.always_update or (self.populate_from and not value):
Expand Down
30 changes: 28 additions & 2 deletions autoslug/tests/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.db.models import Model, CharField, DateField, ForeignKey, Manager
from django.db.models import Model, CharField, DateField, BooleanField, ForeignKey, Manager


# this app
Expand Down Expand Up @@ -27,7 +27,7 @@ class ModelWithUniqueSlugDate(Model):
slug = AutoSlugField(unique_with='date')


class ModelWithUniqueSlugDay(Model): # same as ...Date, just more explicit
class ModelWithUniqueSlugDay(Model): # same as ...Date, just more explicit
date = DateField()
slug = AutoSlugField(unique_with='date__day')

Expand Down Expand Up @@ -82,6 +82,8 @@ class ModelWithCustomPrimaryKey(Model):


custom_slugify = lambda value: default_slugify(value).replace('-', '_')


class ModelWithCustomSlugifier(Model):
slug = AutoSlugField(unique=True, slugify=custom_slugify)

Expand Down Expand Up @@ -144,3 +146,27 @@ class ModeltranslationOne(Model):
title = CharField(max_length=255)
description = CharField(max_length=255)
slug = AutoSlugField(populate_from='title', always_update=True, unique=True)


class NonDeletedObjects(Manager):
def get_queryset(self):
return super(NonDeletedObjects, self).get_queryset().filter(is_deleted=False)


class AbstractModelWithCustomManager(Model):
is_deleted = BooleanField(default=False)

objects = NonDeletedObjects()
all_objects = Manager()

class Meta:
abstract = True

def delete(self, using=None):
self.is_deleted = True
self.save()


class NonDeletableModelWithUniqueSlug(AbstractModelWithCustomManager):
name = CharField(max_length=200)
slug = AutoSlugField(populate_from='name', unique=True, manager_name='all_objects')
7 changes: 7 additions & 0 deletions autoslug/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,13 @@ def test_shared_slug_space(self):
b.save()
assert b.slug == u'my-name-2'

def test_autoslug_with_manager_name(self):
a = NonDeletableModelWithUniqueSlug.objects.create(name='My name')
self.assertEqual(a.slug, u'my-name')
a.delete()
b = NonDeletableModelWithUniqueSlug.objects.create(name='My name')
self.assertEqual(b.slug, u'my-name-2')


class AutoSlugModelTranslationTestCase(TestCase):

Expand Down

0 comments on commit d3bf4c2

Please sign in to comment.