Hi,

I'm trying to save space in database rows in tables that have bigint-sized 
numbers of rows. One of the things I'm trying to do is using a smallint for 
the `id` on one of the models that is pointed to from those big tables:

I have a model A with a custom AutoField for its primary key that uses a 
smallint instead of int by way of a custom db_type method. I have a second 
model B that subclasses A.  Model C is the model with the large number of 
rows and has a foreign key to B. Django generates an int-sized column in 
model B for the foreign key to the superclass A. I hoped for a 
smallint-sized column, as that's what the related field is using. MySQL 
spits out an error. 

I'm reading the ForeignKey.db_type method (rel 1.6): I don't quite 
understand why it insists on returning the db_type from IntegerField when 
my field is an instance of AutoField. I'm guessing it has something to do 
with AutoField's db_type returning AUTO_INCREMENT along with its column 
type. This works if the field is specifically of the builtin type 
AutoField, but not necessarily with some random subclass;

And as I understand it from the __new__ in ModelBase I invariably end up 
with a OneToOneField for the `a_ptr_id` field in the subclass. So I don't 
seem to be able to "patch" that field, like I can with the `id` field in 
model A or a regular foreign key. 

All I can come up with is this yucky:

>>> B._meta.get_field('a_ptr').db_type = lambda connection: 'smallint'

..which works, or I could create a standalone model B that "inherits" from 
model A without using Python inheritance, i.e. explicitly create a smallint 
primary key and fiddle with create statements so that I also get records in 
A.  

Is there any (nice) way I can persuade Django to return a different db_type 
for that OneToOneField in the subclass?

thanks,
Jeroen Pulles

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/fecb3314-4670-4691-a564-8db51c4640d3%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to