User model as ForeignKey forcing username instead of id.

204 views
Skip to first unread message

Blaine Wimberly

unread,
Nov 23, 2022, 9:22:14 AM11/23/22
to Django users

For some reason, no matter what I do, User.pk, User (as ForeignKeyField, and just about anything else is forcing the username as the value instead of User.id.

 

I have googled searched this issue in every way I can think if. The only results I keep finding are the exact opposite issue where people are wanting the Primary Key to be something else other than id. On all of those issues I have found the answer was always “User.pk always returns User.id.” It doesn’t matter how I write it.

 

user_id = User.pk print(user_id) result = username

 

user_id = models.OneToOneField(User, to_field='id', on_delete=models.CASCADE)

Result is = username

 

user_id = models.ForeignKeyField(User, to_field='id', on_delete=models.CASCADE)

Result is username

 

I have attempted to change the primary key in the admin_user table in my database to point to id, result was that 0 rows affected.

 

The only time I am able to get the User.id is in a template where I get the following results.

 

Template Tags

{{user.pk}} = user.id

{{user.id}} = user.id

{{user.username}} = username

using instance as object in situations like signals.  

instance.id = user.id

instance = username

instance.username = (no result)

With the above use in a custom signal function I am able to create an entry in my profile table and populate p_username = instance and p_user_id=instance.id

In the above use, I can have p_username as a foreignkey to User, however, if I change it to instance.username I get an error when the signal function executes "p_username" must be a User instance. I get the same error when changing the ForeignKey to p_user_id and set it to instance.id. Error:p_user_id must be a User instance. 

p_user_id = instance.id populates the p_user_id with the correct id as long as it isn't set as a foreignkey or one-to-one relationship on User. It just doesn't make sense. 

What I need is simply to be able to use the User.pk or User.id as the foreignkey. Who the ___ uses username as the foreignkey for anything? I certainly can’t imagine it being the ultimate key across an application where the user is the key to all things.

 

Anyway, any assistance would be greatly appreciated. Don't kill me for any typing errors, I have been working this one issue for 16 hours. My eyes are crossed. 


Thanks, 

Blaine

 

Blaine Wimberly

unread,
Nov 23, 2022, 10:19:04 AM11/23/22
to Django users
Issue resolved.

In pure frustration, I dumped the database and deleted all migrations. 

While I am not positive, I am pretty sure the issue originated due to updating the original CharField to be the ForeignKey, Django in its infinite wisdom (not sarcastic) was finding the first non integer in the instance to assign to the foreignkey. 

In addition, in the admin panel for my profile model, it still shows the username in the dropdown, however, in the sql database the id is saved as an integer. 

As a reminder for those who may miss it like I did, when assigning a foreignKey Django adds a _id to the end of your foreignkeyfield when creating the column in the database. This can be problematic when creating raw sql queries as the field name in your model may be user_id, but in the database it is actually user_id_id making it myapp_model.user_id_id for raw queries instead of myapp_model.user_id. Just something to keep in mind. This does not impact things such as model.objects.user_id, as Django maps this correctly in the backend. 

Anyway, I appreciate the help all. :)

Erik Manuel Herazo Jimenez

unread,
Nov 23, 2022, 6:39:44 PM11/23/22
to django...@googlegroups.com
why don't you try to return it by context using a dictionary?, specify where what is the key and what is the value

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2c973cff-1b66-4e5d-9f69-e5a83077dfa2n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages