2011-09-21 110 views
9

manage.py syncdbmanage.py syncdb爲表格中的模型創建數據庫表。如何使manage.py創建格式爲modelname的表格?Django syncdb表

是唯一的辦法就是增加class Meta: db_table = u'modelname'

+0

我不知道,但可能向南做到這一點。 –

+0

這不是關於創建表的南部,而是關於使用它們的django。所以是,不是。總有一些方法可以克服它,但據我所知,安全和有據可查的方法只是香草醬裏面的一種。 – JackLeo

回答

8

是,改變創建的表名的唯一方法是設置db_table到內部元類。

請參閱https://docs.djangoproject.com/en/dev/ref/models/options/#table-names


然而,有了一些元類魔法,它實際上可以做你正在尋找的東西。這個例子只是爲了表明這是可能的,因爲Python是一種很好的語言。它可以打破Django的新版本(儘管不太可能),因爲ModelBase和_meta沒有正式記錄AFAIK。我只需堅持在模型中手動添加db_table。

通過創建構造模型類的自定義元類,可以更改內部元類的db_table屬性。

from django.db import models 
from django.db.models.base import ModelBase 

class ModelWithoutAppNameBase(ModelBase): 
    def __new__(cls, name, bases, attrs): 
     model = super(ModelWithoutAppNameBase, cls).__new__(cls, name, bases, attrs) 
     model._meta.db_table = name.lower() 
     return model 


class ModelWithoutAppName(models.Model): 
    __metaclass__ = ModelWithoutAppNameBase 

然後,從ModelWithoutAppName而不是django.db.models.Model繼承當你創建你的模型:

class YourModel(ModelWithoutAppName): # database table name will be yourmodel 
    foo = models.IntegerField()