2012-09-05 62 views
1

按照慣例,django在__unicode__方法定義之前的類定義中將class Meta:聲明倒數第二。這是必需的嗎?我試圖在Lion OSX上追蹤一個db_table = u'TableName'語句的案例(大寫/小寫)被某些模型忽略的隱患。對於某些型號,manage.py syncdb創建mysql表格,lower() ed表格名稱,其他型號正確使用db_table格式。更復雜的模型,自定義save()和其他方法是在創建mysql表之前轉換爲小寫的。我正在嘗試大量代碼重新排列以查看這是否是問題,但找不到正確順序的文檔,儘管我在過去的某個地方記得指定了class Meta:的位置。在django中,'class Meta:`聲明放置在哪裏?

此外,還試圖爲db_table規範和單字節字符串文字的Unicode字面值。 Niether有所作爲(爲工作或非工作模式)

下面是相關代碼:

的grep -A5-B2γ_表 '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

標籤/縮進罰款。在Linux服務器上工作正常,而不是OSX Lion。 – hobs

1

原來class Meta:的位置確實是一條紅色鯡魚(就像@sdolan明確指出的那樣)。很明顯,MAMP或Django存儲關於在表格之外的某些地方刪除表的情況的元數據。一旦我們刪除整個數據庫並重建,db_table的情況被mysql和syncdb