|
|
|
@ -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) |
|
|
|
|