Each Answer to this Q is separated by one/two green lines.
I defined below model and getting
You are trying to add a non-nullable field 'user' to videodata without a default; we can't do that
class User(Model): userID = models.IntegerField() userName = models.CharField(max_length=40) email = models.EmailField() class Meta: ordering = ['userName'] verbose_name="User MetaData" verbose_name_plural="Users MetaData" def __unicode__(self): return str(self.userName) class VideoData(Model): video = models.CharField(max_length=40) time = models.IntegerField() user = models.ForeignKey(User, related_name="User") class Meta: verbose_name="User_Video MetaData"
Where i am doing wrong????
As the error says, your user field on VideoData is not allowing nulls, so you either need to give it a default user or allow nulls. Easiest way is to allow nulls.
user = models.ForeignKey(User, related_name="User", null=True)
or have a default user
user = models.ForeignKey(User, related_name="User", default=<have your default user id here>)
I have run into the same problem with my OneToOneField. And, what I did was to delete all the migration files (which are under the directory of
migrations under your app), and ran:
python manage.py makemigrations
python manage.py migrate
I don’t know why, but it worked in my case. It won’t hurt you to try what I wrote above.
Here is what I did to fix the same issue
- Comment the foreign key reference in videodata and run the makemigrations and migrate
- Add the model in admins.py and make a new entry in table
- Now uncomment the foreign key reference and provide a default=1 .Run make migrations and migrate
- Remove the default=1 in foreign key field.
Hope this helps.
This solution will work everytime you face these kinds of error.
Here is what I do:
requirement = models.ForeignKey(Requirement)to
requirement = models.ForeignKey(Requirement, null=True)
- run makemigrations and migrate
- change back
requirement = models.ForeignKey(Requirement, null=True)to
requirement = models.ForeignKey(Requirement)
- run makemigrations and migrate again.
I guess the rule of django-orm about foreignKey is:
- allow foreignKey to be null when first create table
- reject to add a foreignKey which is null, because the foreignKey of the data insert into table before will be null, which against programmer’s will
- allow to change foreignKey from not null to null.
The problem sometimes happens when you make a lot of changes in your models.py file (in my case It was related to an ImageField non-nullable field). Rather than field problems indeed. One solution in django 2.0.2 , python 3.6.4 , mysql 5.7.21
- Delete all files inside migrations folder
__init__.py, be careful.
You could check if the problem was fixed, if not:
- Repeat the above step, and
- Delete your database (e.g. in mysql
mysql> DROP DATABASE <name_db>)
- Now create a new one with the same name
mysql> CREATE DATABASE <name_db>.
These steps fixed the issue in my case. Now you could run without mistakes:
$ python manage.py makemigrations $ python manage.py migrate
I have faced the same issue: …non-nullable field ‘user’ to videodata…
just add one more attr in the field user of the model Videodata: default=””
The problem happens when I use TextField().
I found my previous migration file somehow overwrites new fields.
Cleaning previous migration files before re-migrating happens resolve the issue.