9

Django がテーブルを作成すると、app_class という形式の名前が付けられます。私は、別の (ただし基本的には内容が似ている) データベースを Django インストールに改造する立場にあります。テーブル名の前に app_ が追加されていません。

それに応じてデータベースとそのテーブルを再作成できますが、Django にテーブル名の処理方法を変更する柔軟性があるかどうかを確認したいと思います。

つまり、テーブル coi_fs があります。Django のインストールを、app_coi_fs ではなく単に coi_fs を参照するように変更できるかどうかを確認したいと思います。

4

3 に答える 3

7

すでにデータベースがある場合は、データベース イントロスペクション オプションを使用することをお勧めします。これにより、現在のデータベースをそのまま使用するために必要なモデルが作成されます。

$ django-admin.py inspectdb > models.py

ただし、元の質問に答えるには、ドキュメント (https://docs.djangoproject.com/en/dev/ref/models/options/#table-names) から、db_table メタ プロパティを使用できます。

models.py

class DjangoSite(models.Model):
    domain = models.CharField(max_length=100)
    name = models.CharField(max_length=50)
    class Meta:
        db_table = u'site'
于 2012-12-19T05:32:01.180 に答える
3

もちろん、モデルのメタクラスを変更するだけで、Django でも実行できます。

from django.db.models.base import ModelBase

class ModelMetaClass(ModelBase):
    def __new__(cls, name, bases, attrs):
        new_class = super().__new__(cls, name, bases, attrs)

        new_class._meta.db_table = some_awesome_logic_implemented_by_you()

        return new_class

そしてモデルで:

class DjangoSite(models.Model, metaclass=ModelMetaClass):
    # __metaclass__ = ModelMetaClass  # Python 2.x

    class Meta:
        pass

これで完了です。

于 2013-01-17T15:26:02.870 に答える
1

すべてのテーブルの名前を普遍的に変更したい場合は、django ソースを編集します。これは危険に思えますが、Django のインストールを明示的に変更したい場合は、それを実行する必要があります。https://github.com/django/django/blob/master/django/db/models/options.py

古い options.py

self.db_table = "%s_%s" % (self.app_label, self.model_name)

新しい options.py

self.db_table = self.model_name
于 2012-12-20T15:30:09.000 に答える