Auto-rename duplicate fields

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
def rename_dupes(model, field_name):
    """
    Rename duplicate character fields, by adding numbers to duplicates.

    example: contents2, contents3, etc.
    """
    changed = set()
    for obj in model.objects.all():
        value = getattr(obj, field_name)
        duplicates = model.objects.filter(**{field_name: value}).exclude(pk=obj.pk)
        for i, dupe in enumerate(duplicates):
            if dupe.pk in changed:
                continue
            changed.add(obj.pk)
            changed.add(dupe.pk)
            print 'Fixing duplicate %s.%s:' % (obj.__class__.__name__, field_name), obj.pk, obj.name, '-', dupe.pk, dupe.name
            setattr(dupe, field_name, value + str(i+2))
            dupe.save()

More like this

  1. Proper fixtures loading in south data migrations by JustDelight 3 months, 3 weeks ago
  2. Automate unique slug (again) by davidwtbuxton 5 years, 1 month ago
  3. YAAS (Yet Another Auto Slug) by carljm 5 years ago
  4. Transparently encrypt ORM fields using OpenSSL (via M2Crypto) by ncoghlan 1 year, 11 months ago
  5. Friendly ID by willhardy 4 years, 6 months ago

Comments

(Forgotten your password?)