1

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

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

以下是相关代码:

grep -A5 -B2 _table '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)
4

2 回答 2

2

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

于 2012-09-05T19:08:54.060 回答
1

事实证明,这个class Meta:职位确实是一个红鲱鱼(@sdolan 明确表示)。显然,MAMP 或 django 将有关已删除表的情况的元数据存储在表本身之外的某个地方。一旦我们删除了整个数据库并重建,这个db_table案例就被 mysql 和syncdb

于 2012-09-07T17:18:48.063 回答