Django syncdb表的自定义名称

时间:2011-09-21 09:14:32

标签: django

manage.py syncdbappname_modelname格式为模型创建数据库表。如何使manage.py以modelname格式创建表?

是添加class Meta: db_table = u'modelname'

的唯一方法

1 个答案:

答案 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()