Blank and Default arguments are not interchangeable. The resulting interaction will be different, depending on what combination you use. For example,
some_field = models.CharField(default='', max_length=20)
...will not allow you to save the model instance without entering data into some_field. The default empty string in this case is just allowing you to add that field to the model upon migration, since you aren't also allowing null with null=True.
some_field = models.CharField(blank=True, default='', max_length=20)
...will save without data, since blank=True.
Another way of putting this is that your default='' is allowing the non-nullable field to exist, and blank=True is allowing your non-nullable field to save() without data entry. If you try to migrate the following:
some_field = models.CharField(max_length=20)
...you'll get the following error:
You are trying to add a non-nullable field 'some_string' to YourModelName without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
...since a non-nullable field without a default can't exist on the database, but a blank=True field can. Note, I'm speaking here of PostgeSQL. This may or may not apply to any/every other DB out there.