Default value for foreign key in Django migrations.AddField
You can't do it directly. The recommended way of doing this is to create a migration to add it with null=True, then add a data migration that uses either Python or SQL to update all the existing ones to point to available_state_id
, then a third migration that changes it to null=False.
I just had the same issue and stumbled upon this answer, so here is how I did it:
operations = [ # We are forced to create the field as non-nullable before # assigning each Car to a Brand migrations.AddField( model_name="car", name="brand", field=models.ForeignKey( null=True, on_delete=django.db.models.deletion.PROTECT, to="model.Brand", ), ), # assign_car_to_brand loops over all my Car objects and sets their # "brand" field migrations.RunPython(add_category_to_tags, do_nothing), # Make the field non-nullable to force all future Car to have a Brand migrations.AlterField( model_name="car", name="brand", field=models.ForeignKey( null=False, on_delete=django.db.models.deletion.PROTECT, to="model.Brand", ), preserve_default=False ), ]