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.
"""
def get_similar_values(value):
return queryset.exclude(pk=instance.pk) \
.filter(**{"%s__istartswith" % field_name: value}).values_list(field_name, flat=True)
if not queryset:
queryset = instance._meta.default_manager.get_queryset()
if not value:
raise ValueError("Cannot uniquify empty value")
# TODO Instead get value from instance.field, or use a default value?
field = instance._meta.get_field(field_name)
if not max_length:
max_length = instance._meta.get_field(field_name).max_length
if not queryset:
queryset = instance._meta.default_manager.get_queryset()
if not value:
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
m = re.match(r'(.+)(-\d+)$', value)

Loading…
Cancel
Save