在django中,放置“类Meta:”声明的位置是否重要?

时间:2012-09-05 19:06:30

标签: mysql django macos model meta

按照惯例,django将class Meta:声明放在类定义中倒数第二,就在__unicode__方法定义之前。这需要吗?我试图追踪Lion OSX上的一个阴险错误,其中某些模型忽略了db_table = u'TableName'语句的大小写(大写/更低)。对于某些模型manage.py syncdb创建具有lower() ed表名的mysql表,而对于其他模型,它正确使用db_table个案。使用自定义save()和其他方法的更复杂的模型是在创建mysql表之前转换为小写的模型。我正在尝试大量的代码重新排列以查看是否存在问题,但无法找到正确顺序的文档,尽管我在过去的某个地方回想起指定了class Meta:的位置。

还尝试了db_table规范和单字节字符串文字的unicode文字。 Niether有所作为(对于工作模式或非工作模式)

以下是相关代码:

grep -A5 -B2 _table'unitorganorganizer / 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 个答案:

答案 0 :(得分:2)

您可以将class Meta放在模型中的任何位置,只要它与正确的缩进相匹配。

答案 1 :(得分:1)

原来class Meta:位置确实是红鲱鱼(正如@sdolan所说)。显然,MAMP或django在表格本身之外的某处存储有关已删除表格的元数据。一旦我们删除整个数据库并重建,db_table案例就被mysql和syncdb

所尊重