有Django设置可为MultipleWords模型生成multi_words表名吗?

时间:2018-07-15 23:56:15

标签: django django-models

给出一个名为x_y的示例应用程序,其模型名为FooBar,则生成的表名称为x_y_foobar,而不是预期的x_y_foo_bar。这使得读取和区分表名变得更加困难,尤其是长名称时。我可以使用全局设置吗,所以不必 手动设置每个表名?

PS:我可以在表名中使用TLA这样的模型名作为t_l_a来解决问题。

1 个答案:

答案 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