In 2018 in Django to pass user data in two separate tables User and Profile is categorically wrong! Django already 4 years at least allows you to create your own User model with all the fields you need. This code will be much easier to write and maintain, and disappear the car and small truck JOINS s required for a reload Profile.
And in fact the issue: before saving the model instance in the database, create the associated models, as Django needs to know the primary key of the User to create them, and it is generated in the process of saving the model.
There is a package to work around this limitation: django-modelcluster
, but in your case it's better to rewrite the user model.