I am using a legacy database which does a couple things that make sense in a db way, but not sure how to represent them in Django so that South and Django itself can deal with them.
I have a Parts table with PartCode as the key I have a Vendor table with VendorCode as the key
I have a PartsVendor table with FK's to Parts and Vendor, as well as additional information about the relationship. I am using the "through" parameter so it stands on it's own, but it uses the PartCode+VendorCode as a composite key, something not supported in Django. Only when using South or functions like dumpdata where it wants to see a primary key do I run into an issue. However, those are pretty big issues.
My temporary solution was to just add an _id field as AutoField and added a serial field in Postgres which works fine, but then when using South it chokes on the fact that is default=False and NOT NULL is true.
I've gone down the path of trying to write a custom field, but this seemed like a dead end since I am not actually changing anything about the field type.
In PostgreSQL, serial type isn't actually a regular type.
What serial does is set an integer field up with the default value of the next number in a sequence. The sequence is stored elsewhere in the database (and can be manually created as well)
I've not tested this, but it would seem logical serial fields would all be represented as Integers in Django. Apply the default attribute to the Field and leave it off your inserts.
I hope that helps. :)