当Django创建表格时,它会为它们提供表单app_class的名称。我正在将一个不同的(但内容基本相似)数据库改造成Django安装。我的表名称不会附加app _。
我可以相应地重新创建我的数据库及其表,但我想看看Django是否可以灵活地修改它如何处理表名。
也就是说,我有一个表coi_fs - 我想看看我是否可以更改Django安装,以便它不会引用app_coi_fs而只是引用coi_fs?
答案 0 :(得分:5)
如果您已有数据库,我建议您使用数据库内省选项。这将创建按原样使用当前数据库所需的模型。
$ django-admin.py inspectdb > models.py
要回答原始问题,可以从文档(https://docs.djangoproject.com/en/dev/ref/models/options/#table-names)中使用db_table元属性。
class DjangoSite(models.Model):
domain = models.CharField(max_length=100)
name = models.CharField(max_length=50)
class Meta:
db_table = u'site'
答案 1 :(得分:1)
当然你可以在django中完成,只需更改模型的元类:
class (ModelBase):
def __new__(cls, name, bases, attrs):
klas = super(ChemblModelMetaClass, cls).__new__(cls, name, bases, attrs)
klas._meta.db_table = someAwesomeLogicImplementedByYou
return klas
然后在对象中:
class DjangoSite(models.Model):
__metaclass__ = ModelMetaClass
class Meta:
pass
你完成了!
答案 2 :(得分:0)
如果要通用重命名所有表,请编辑django源。这似乎很危险,但如果你明确想要改变Django安装而不是它。 https://github.com/django/django/blob/master/django/db/models/options.py
self.db_table = "%s_%s" % (self.app_label, self.module_name)
self.db_table = self.module_name