给出一个名为x_y
的示例应用程序,其模型名为FooBar
,则生成的表名称为x_y_foobar
,而不是预期的x_y_foo_bar
。这使得读取和区分表名变得更加困难,尤其是长名称时。我可以使用全局设置吗,所以不必 手动设置每个表名?
PS:我可以在表名中使用TLA
这样的模型名作为t_l_a
来解决问题。
答案 0 :(得分:1)
您可以通过子类化ModelBase
来更改模型的元类:
import re
from django.db.models.base import ModelBase
class ModelMetaClass(ModelBase):
def __new__(cls, name, bases, attrs):
new_class = super(ModelMetaClass, cls).__new__(cls, name, bases, attrs)
new_class._meta.db_table = new_class._meta.app_label + '_' + '_'.join(map(str.lower, re.findall(r'[A-Z][^A-Z]*', name)))
return new_class
然后在您的模型中:
class FooBar(models.Model):
__metaclass__ = ModelMetaClass
class Meta:
pass