Django - Slugs - Key (slug)=() is duplicated
Question: just started fooling around with Django and came across a link
[here](http://www.tangowithdjango.com/book17/chapters/models_templates.html)
on how to create slugs. I was told to perform the following changes to an
existing model:

    
    
    from django.template.defaultfilters import slugify
    
    class Category(models.Model):
        name = models.CharField(max_length=128, unique=True)
        views = models.IntegerField(default=0)
        likes = models.IntegerField(default=0)
        slug = models.SlugField(unique=True)
    
        def save(self, *args, **kwargs):
            self.slug = slugify(self.name)
            super(Category, self).save(*args, **kwargs)
    
        def __unicode__(self):
            return self.name
    

This worked out pretty well until I tried to migrate the database using:

    
    
    python manage.py makemigrations
    

The above asked for a default value so following the guide, I gave it ''.
Then:

    
    
    python manage.py migrate
    

The above returned "DETAIL: Key (slug)=() is duplicated."

I'm not entirely sure why this happened. Perhaps it's because I'm adding a new
field that is unique and I can't populate it with ''? If so, what do I have to
do in order to populate the database?


Answer: The documentation [explains how to migrate in these
circumstances](https://docs.djangoproject.com/en/1.8/howto/writing-
migrations/#migrations-that-add-unique-fields). A quick summary:

  * create the field without unique=True
  * create a migration with a RunPython function that iterates through all Categories and calls save on them, which will populate the slug
  * create a final migration which sets unique=True.

