Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do I need to make a migration if I change null and blank values on a Model field?

I have the following model

@python_2_unicode_compatible
class Booking(models.Model):
    session = models.ForeignKey(verbose_name=_('Session'), to=Session, default=None, null=False, blank=False)
    quantity = models.PositiveIntegerField(verbose_name=_('Quantity'), default=1, null=False, blank=False)
    price = models.DecimalField(verbose_name=_('Price'), max_digits=10, decimal_places=2,
                                default=None, null=False, blank=False)
    name = models.CharField(verbose_name=_('Name'), max_length=100, default=None, null=False, blank=False)
    email = models.EmailField(verbose_name=_('Email'), default=None, null=True, blank=True)
    phone_number = models.CharField(verbose_name=_('Phone Number'), max_length=30, default=None, null=True, blank=True)

Say I need to change my email and phone_number fields. I want them to have null=False and blank=False. Do these alterations require a new migration?

like image 351
joaofguerreiro Avatar asked Apr 21 '17 10:04

joaofguerreiro


People also ask

What is the difference between null and blank in Django models?

null is purely database-related, whereas blank is validation-related(required in form). If null=True , Django will store empty values as NULL in the database . If a field has blank=True , form validation will allow entry of an empty value . If a field has blank=False, the field will be required.

How do I allow null values in Django model?

null=True will make the field accept NULL values. Blank values for Django field types such as DateTimeField or ForeignKey will be stored as NULL in the database.

What does null true mean Django?

If a string-based field has null=True , that means it has two possible values for “no data”: NULL , and the empty string. In most cases, it's redundant to have two possible values for “no data;” the Django convention is to use the empty string, not NULL .


2 Answers

Yes they do. null=False requires a change to the database schema itself; blank=False does not, but Django needs a migration anyway so that the migration runner's internal graph of the model state is up to date.

like image 183
Daniel Roseman Avatar answered Oct 06 '22 03:10

Daniel Roseman


Sure. To check it you can run python manage.py makemigrations --dry-run (the --dry-run doesn't save a new migration file, but shows if it's necessary)

like image 33
XaviP Avatar answered Oct 06 '22 04:10

XaviP