Я работаю с устаревшей базой данных, которая использует MySQL большой Int поэтому настройки I простой пользовательской модели поле справиться с этим:Джанго Юг Внешние ключи, относящиеся к ПКС с пользовательскими полями
class BigAutoField(models.AutoField):
def get_internal_type(self):
return "BigAutoField"
def db_type(self):
return 'bigint AUTO_INCREMENT' # Note this won't work with Oracle.
Это прекрасно работает с django south для полей id/pk (mysql desc "| id | bigint (20) | NO | PRI | NULL | auto_increment |"), но поля ForeignKey в других моделях ссылающиеся поля создаются как int (11), а не bigint (20).
Я предполагаю, что я должен добавить правило интроспекции на BigAutoField, но, похоже, не упоминается такое правило в документации (http://south.aeracode.org/docs/customfields.html).
Update: В настоящее время с помощью Django 1.1.1 и 0.6.2 Юг
Update 2: Кажется код Django отвечает.
из django.db.models.fields.related.ForeignKey.db_type():
rel_field = self.rel.get_related_field()
if (isinstance(rel_field, AutoField) or
(not connection.features.related_fields_match_type and
isinstance(rel_field, (PositiveIntegerField,
PositiveSmallIntegerField)))):
return IntegerField().db_type()
Как я перегружать AutoField isinstance возвращается Правда, и это недобросовестный IntegerField. Думаю, мне придется скопировать код AutoField и сделать так. , ,
Да, я обнаружил это после замены всего кода AutoField. ForeignKey затем устанавливает себя в bigint AUTO_INCREMENT, что сильно нарушает ситуацию. Django 1.2 предлагает bigint, поэтому я собираюсь решить проблему с помощью ручного миграционного sql-запроса в моих южных миграциях до тех пор, пока мы не перейдем к 1.2 и 0.7. –