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