I'm working on some models for a legacy database structure, and am
having a road_block with Foreign Keys and non-conventional names.

As I understand it, if in my model I have something like:

something = ForeignKey(something)

then django will look for the something_id field in my table when
looking for the relationship. However, if my table has
anotherthing_id, I would have to explicitly define that name. The
documentation has me believe that I would do:

something = ForeignKey(something, to_field='anotherthing_id')

however it doesn't seem to work this well, Django (particularly the
admin) appears to want to find something_id. Here's the concrete case
in my code:

# site table
# site_id (PK)
# ...

# core.Site
class Site(models.Model):
    id = models.IntegerField(primary_key=True, db_column='site_id')

# member.User
class User(models.Model):
    #I already have a attribute in this model called site, so I can't
just do site = ... as it wouldn't be descriptive enough even if I
wouldn't have a conflict
    last_login_site_id = models.ForeignKey('core.Site',
to_field='site_id', related_name='site_last_login_users')

The error I get:

Caught an exception while rendering: (1054, "Unknown column
'user.last_login_site_id_id' in 'field list'")

However when I change the User model to:

class User(models.Model):
    #I already have a attribute in this model called site, so I can't
just do site = ... and it isn't descriptive anyway...
    last_login_site_id = models.ForeignKey('core.Site',
db_column='site_id', related_name='site_last_login_users')

everything seems to work fine. This is confusing to me since I thought
to_field was the attribute I needed, and db_column isn't documented as
a keyword argument for ForeignKey (I assume it's inherited somehow or
undocumented).

Am I doing something horribly wrong? Or did I just misunderstand the
model docs?

Thanks!

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to