manage.py syncdb
は、モデルのdbテーブルをフォームappname_modelname
に作成します。modelname
という形式でテーブルを作成するにはmanage.pyをどのようにすることができますか?テーブルのDjango syncdbカスタム名
は唯一の方法は、はい、作成したテーブルの名前を変更する唯一の方法は、内部クラスMetaにDB_Tableの設定ですclass Meta: db_table = u'modelname'
manage.py syncdb
は、モデルのdbテーブルをフォームappname_modelname
に作成します。modelname
という形式でテーブルを作成するにはmanage.pyをどのようにすることができますか?テーブルのDjango syncdbカスタム名
は唯一の方法は、はい、作成したテーブルの名前を変更する唯一の方法は、内部クラスMetaにDB_Tableの設定ですclass Meta: db_table = u'modelname'
を追加することです。
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()
私はよく分からないが、南はそれを行う可能性があります。 –
それはテーブルを作る南についてではなく、それらを使ってdjangoについてもあります。そう、はい、いいえ。それを克服する方法はいくつかありますが、安全で十分に文書化されている方法は、私が知っている限り、バニラジャンゴの中だけです。 – JackLeo