Browse Source

Some slug handling cleanup.

master
Erik Stein 3 years ago
parent
commit
c501deab1b
  1. 24
      shared/utils/fields.py

24
shared/utils/fields.py

@ -17,17 +17,25 @@ def uniquify_field_value(instance, field_name, value, max_length=None, queryset=
FIXME Doesn't work with model inheritance, where the field is part of the parent class. FIXME Doesn't work with model inheritance, where the field is part of the parent class.
""" """
def get_similar_values(value): if not queryset:
return queryset.exclude(pk=instance.pk) \ queryset = instance._meta.default_manager.get_queryset()
.filter(**{"%s__istartswith" % field_name: value}).values_list(field_name, flat=True)
if not value: field = instance._meta.get_field(field_name)
raise ValueError("Cannot uniquify empty value")
# TODO Instead get value from instance.field, or use a default value?
if not max_length: if not max_length:
max_length = instance._meta.get_field(field_name).max_length max_length = instance._meta.get_field(field_name).max_length
if not queryset: if not value:
queryset = instance._meta.default_manager.get_queryset() if field.blank:
# Special case: Make sure only one row has ean empty value
if queryset.exclude(pk=instance.pk).filter(**{field_name: ''}).exists():
raise ValueError("Only one blank (root) entry allowed.")
return
else:
raise ValueError("Cannot uniquify empty value")
# TODO Instead get value from instance.field, or use a default value?
def get_similar_values(value):
return queryset.exclude(pk=instance.pk) \
.filter(**{"%s__istartswith" % field_name: value}).values_list(field_name, flat=True)
# Find already existing counter # Find already existing counter
m = re.match(r'(.+)(-\d+)$', value) m = re.match(r'(.+)(-\d+)$', value)

Loading…
Cancel
Save