manage.py syncdb
以appname_modelname
格式为模型创建数据库表。如何使manage.py以modelname
格式创建表?
是添加class Meta:
db_table = u'modelname'
答案 0 :(得分:8)
是的,更改已创建表的名称的唯一方法是将db_table设置为内部Meta类。
请参阅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()