9
manage.py syncdb
manage.py syncdb
爲表格中的模型創建數據庫表。如何使manage.py創建格式爲modelname
的表格?Django syncdb表
是唯一的辦法就是增加class Meta: db_table = u'modelname'
manage.py syncdb
manage.py syncdb
爲表格中的模型創建數據庫表。如何使manage.py創建格式爲modelname
的表格?Django syncdb表
是唯一的辦法就是增加class Meta: db_table = u'modelname'
是,改變創建的表名的唯一方法是設置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()
我不知道,但可能向南做到這一點。 –
這不是關於創建表的南部,而是關於使用它們的django。所以是,不是。總有一些方法可以克服它,但據我所知,安全和有據可查的方法只是香草醬裏面的一種。 – JackLeo