當Django創建表格時,會爲它們提供表單app_class的名稱。我正在將一個不同的(但內容基本上相似)數據庫加裝到Django安裝中。我的表名不與app_預先匹配。Django表命名約定。我可以改變它的行爲嗎?
我可以重新創建我的數據庫及其表格,但我想看看Django是否可以靈活地修改它如何處理表名稱。
也就是說,我有一個表coi_fs - 我想看看我是否可以更改Django安裝,以便它不會引用app_coi_fs,而只是引用coi_fs?
當Django創建表格時,會爲它們提供表單app_class的名稱。我正在將一個不同的(但內容基本上相似)數據庫加裝到Django安裝中。我的表名不與app_預先匹配。Django表命名約定。我可以改變它的行爲嗎?
我可以重新創建我的數據庫及其表格,但我想看看Django是否可以靈活地修改它如何處理表名稱。
也就是說,我有一個表coi_fs - 我想看看我是否可以更改Django安裝,以便它不會引用app_coi_fs,而只是引用coi_fs?
如果你已經有一個數據庫,我會建議使用數據庫內省選項。這將創建按原樣使用當前數據庫所需的模型。
$ 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'
inspectdb選項實際上創建與db_table元字段的模型! –
這是有用的信息維克多(我已經有),但它並沒有解決這個特定的問題。最後,我通過回到我的CREATE DATABASE腳本解決了這個問題,並在app_之前添加了表名。我希望有一個更好的解決方案,但這會做。所以我不能標記你答案已解決,但我可以給它一個+1。 – patfla
如果要普遍重命名所有的表,編輯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
當然,你可以做到這一點在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
你就完成了!
看看這裏:https://docs.djangoproject.com/en/dev/ref/models/options/#table-names – Jingo