Hi, there are many ways to design a database. (when I think back to my training and the topic of normalisation...🤣 ) The question is always whether it makes technical/professional sense to list certain data in different tables. Like a postcode, for example. And yes, believe it or not, there are companies that even write the postcode in a separate table so that the same postcode does not appear several times in the actual ‘main data’, but only an id/reference to it.
If you ask me... your database design looks solid. The only thing I would still customise would be the ‘roles’, e.g. ‘is_superuser’ etc. These are always included in the standard Django User ORM object. If you are not planning to add further authorisations/roles there, you can leave it as it is. Otherwise, I would create a ‘permissions’ or ‘roles’ table with a name, description, etc. and then assign these roles to the users.