fields.py 725 B

123456789101112131415161718192021222324
  1. import random
  2. import string
  3. from django_extensions.db.fields import AutoSlugField
  4. class OrganizationSlugField(AutoSlugField):
  5. """
  6. Generate a random alphanumeric slug starting at length 2.
  7. Increase length by 1 if collision is found.
  8. """
  9. def slug_generator(self, original_slug, start):
  10. yield original_slug
  11. for i in range(start, self.max_unique_query_attempts):
  12. yield (
  13. original_slug
  14. + "-"
  15. + "".join(random.choices(string.ascii_lowercase + string.digits, k=i))
  16. )
  17. raise RuntimeError(
  18. "max slug attempts for %s exceeded (%s)"
  19. % (original_slug, self.max_unique_query_attempts)
  20. )