2011-09-21 5 views
9

manage.py syncdbは、モデルのdbテーブルをフォームappname_modelnameに作成します。modelnameという形式でテーブルを作成するにはmanage.pyをどのようにすることができますか?テーブルのDjango syncdbカスタム名

は唯一の方法は、はい、作成したテーブルの名前を変更する唯一の方法は、内部クラスMetaにDB_Tableの設定ですclass Meta: db_table = u'modelname'

+0

私はよく分からないが、南はそれを行う可能性があります。 –

+0

それはテーブルを作る南についてではなく、それらを使ってdjangoについてもあります。そう、はい、いいえ。それを克服する方法はいくつかありますが、安全で十分に文書化されている方法は、私が知っている限り、バニラジャンゴの中だけです。 – JackLeo

答えて

8

を追加することです。

https://docs.djangoproject.com/en/dev/ref/models/options/#table-namesを参照してください。


ただし、一部のメタクラスの魔法では、実際には探していることを行うことができます。この例は、Pythonがとてもいい言語なので可能であることを示しています。 ModelBaseと_metaは公式にAFAIKを文書化していないので、Djangoの新しいリリース(たとえそうではないにしても)と壊れる可能性があります。あなたのモデルに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() 
関連する問題