Add option include_time to LocalizedUniqueSlugField

This commit is contained in:
Swen Kooij
2017-02-15 19:13:19 +02:00
parent 64c3c06612
commit ca6b1c88fa
4 changed files with 63 additions and 10 deletions

View File

@@ -1,4 +1,5 @@
from typing import Callable
from datetime import datetime
from django import forms
from django.conf import settings
@@ -16,6 +17,7 @@ class LocalizedAutoSlugField(LocalizedField):
"""Initializes a new instance of :see:LocalizedAutoSlugField."""
self.populate_from = kwargs.pop('populate_from', None)
self.include_time = kwargs.pop('include_time', False)
super(LocalizedAutoSlugField, self).__init__(
*args,
@@ -30,6 +32,7 @@ class LocalizedAutoSlugField(LocalizedField):
LocalizedAutoSlugField, self).deconstruct()
kwargs['populate_from'] = self.populate_from
kwargs['include_time'] = self.include_time
return name, path, args, kwargs
def formfield(self, **kwargs):
@@ -76,6 +79,9 @@ class LocalizedAutoSlugField(LocalizedField):
if not value:
continue
if self.include_time:
value += '-%s' % datetime.now().microsecond
def is_unique(slug: str, language: str) -> bool:
"""Gets whether the specified slug is unique."""

View File

@@ -7,6 +7,8 @@ from ..mixins import AtomicSlugRetryMixin
from ..localized_value import LocalizedValue
from .localized_autoslug_field import LocalizedAutoSlugField
from datetime import datetime
class LocalizedUniqueSlugField(LocalizedAutoSlugField):
"""Automatically provides slugs for a localized
@@ -34,6 +36,18 @@ class LocalizedUniqueSlugField(LocalizedAutoSlugField):
)
self.populate_from = kwargs.pop('populate_from')
self.use_time = kwargs.pop('include_time', False)
def deconstruct(self):
"""Deconstructs the field into something the database
can store."""
name, path, args, kwargs = super(
LocalizedUniqueSlugField, self).deconstruct()
kwargs['populate_from'] = self.populate_from
kwargs['include_time'] = self.include_time
return name, path, args, kwargs
def pre_save(self, instance, add: bool):
"""Ran just before the model is saved, allows us to built
@@ -70,6 +84,9 @@ class LocalizedUniqueSlugField(LocalizedAutoSlugField):
continue
slug = slugify(value, allow_unicode=True)
if self.include_time:
slug += '-%d' % datetime.now().microsecond
if instance.retries > 0:
slug += '-%d' % instance.retries