2012-09-05 1 views
1

По соглашению django помещает объявление class Meta:, второе, последнее в определении класса, непосредственно перед определением метода __unicode__. Это необходимо? Я пытаюсь проследить коварную ошибку на Lion OSX, где случай (капитал/ниже) оператора db_table = u'TableName' игнорируется для некоторых моделей. Для некоторых моделей manage.py syncdb создает таблицы mysql с именами таблиц lower(), а для других он правильно использует db_table. Более сложные модели с настраиваемыми save() и другими методами - это те, которые преобразуются в нижний регистр перед созданием таблиц mysql. Я пытаюсь много перестроить код, чтобы понять, если это проблема, но не может найти документацию для правильного порядка вещей, хотя в прошлом я помню, что была указана позиция для class Meta:.В django имеет значение, где размещена декларация `class Meta:`?

Также были использованы как литералы в формате unicode для спецификации db_table, так и однобайтовые строковые литералы. Niether сделать разницу (для работы или нерабочую модель)

Вот соответствующий код:

Grep ~В2 _table А5 'entityorganizer/models.py'

class Meta: 
     db_table  = 'Entity' 
     verbose_name_plural = "entities" 
     ordering = ["map_status","type_name","name"] 
     get_latest_by = "updated" 

-- 

    class Meta: 
     db_table = 'EntityRelationship' 
     ordering = ["to_entity","relationship_type"] 
     unique_together = (('from_entity','to_entity','relationship_type')) 
     get_latest_by = "updated" 
     verbose_name = "relationship" 

-- 

    class Meta: 
     db_table = 'Specialty' 
     verbose_name_plural = u'specialties' 

    def __unicode__(self): 
     return '%s'%(self.specialty) 

-- 

    class Meta: 
     db_table = 'ZipCode' 
     get_latest_by = "updated" 

    def get_region(self): 
     return REGION[region_id_v2-200][1] or 0 

-- 

    class Meta: 
     db_table = 'Setting' 

    def __unicode__(self): 
     return '%s = %s'%(self.name, self.value) #, self.updated) 

ответ

2

Вы можете поместить ваш class Meta, где бы вы ни находились в своих моделях, если он соответствует правильному отступу.

+0

Это то, что я предполагал. Должна быть какая-то другая ошибка в моей модели def или несогласованность в том, как Lion и MAMP обрабатывают случай имен таблиц. Единственное, что изменилось между рабочим и нерабочим, - это обновление до Lion OSX на сервере. – hobs

+0

Попробуйте дважды проверить свои вкладки? – sdolan

+0

tabs/вдавлено прекрасный. отлично работает на Linux-сервере, а не OSX Lion. – hobs

1

Оказалось, что позиция class Meta: была действительно красной селедкой (как пояснил @sdolan). По-видимому, MAMP или django хранит метаданные в отношении случая удаленных таблиц где-то вне самих таблиц. После того, как мы удалили всю базу данных и перестроили, случай db_table был удостоен mysql и syncdb