2012-12-19 92 views
4

當Django創建表格時,會爲它們提供表單app_class的名稱。我正在將一個不同的(但內容基本上相似)數據庫加裝到Django安裝中。我的表名不與app_預先匹配。Django表命名約定。我可以改變它的行爲嗎?

我可以重新創建我的數據庫及其表格,但我想看看Django是否可以靈活地修改它如何處理表名稱。

也就是說,我有一個表coi_fs - 我想看看我是否可以更改Django安裝,以便它不會引用app_coi_fs,而只是引用coi_fs?

+3

看看這裏:https://docs.djangoproject.com/en/dev/ref/models/options/#table-names – Jingo

回答

3

如果你已經有一個數據庫,我會建議使用數據庫內省選項。這將創建按原樣使用當前數據庫所需的模型。

$ django-admin.py inspectdb > models.py 

雖則回答你原來的問題,從文檔(https://docs.djangoproject.com/en/dev/ref/models/options/#table-names),你可以使用db_table元屬性。

models.py

class DjangoSite(models.Model): 
    domain = models.CharField(max_length=100) 
    name = models.CharField(max_length=50) 
    class Meta: 
     db_table = u'site' 
+0

inspectdb選項實際上創建與db_table元字段的模型! –

+0

這是有用的信息維克多(我已經有),但它並沒有解決這個特定的問題。最後,我通過回到我的CREATE DATABASE腳本解決了這個問題,並在app_之前添加了表名。我希望有一個更好的解決方案,但這會做。所以我不能標記你答案已解決,但我可以給它一個+1。 – patfla

0

當然,你可以做到這一點在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 

你就完成了!