2

私は非常に興味深い状況に陥っています。

デフォルトの django の Group モデルをいくつかのフィールドで拡張する必要があります。たとえば、グループモデルから継承していくつかの参照を変更するなど、最初に継承を使用しようとしましたが、必要なすべての参照を変更できないようです。そのため、この方法ではdjangoパーミッションシステムが完全に壊れます。

次に、この回答を見つけました: Django Group モデルを拡張するにはどうすればよいですか? 男が方法を使用することを提案した場所field.contribute_to_class()

この調整は、< myapp > のモデル定義のすぐ上に配置しました。(なぜグループの役割が必要なのか聞かないでください。それは私の考えではありません。必要なだけです:D)

if not hasattr(Group, 'roles'):
    field = models.ManyToManyField(
        Role, verbose_name=_('roles'), blank=True,
        help_text=_('List of roles attached to this group'),
           related_name='groups')
    field.contribute_to_class(Group, 'roles')


class MyGroup(Group):

    class Meta:
        proxy = True

    def _sync_permissions(self):
        """
            This method will sync group permissions with all attached Roles.
        """
        self.permissions.clear()
        for role in self.roles.all():
            self.permissions.add(role.permissions)
        self.save()

この部分は機能しているようです (実際には django.contrib.auth.models.Group モデルを変更します)

しかし、次に必要なのは、グループ モデルの移行を生成することです。単純に実行する./manage.py makemigrations <myapp>と、グループ モデルの移行が生成されますが、それを django.contrib.auth アプリケーション内に配置しようとします。これは間違いなく必要なものではありません。

だから、ここでの私の質問は次のとおりです。

グループモデルの移行を生成するようにdjangoに指示する方法はありますが、python libsディレクトリの下に移行ファイルを作成するのではなく、< myapp >内に作成するか、移行コードを出力するだけですか?

4

2 に答える 2

3

django が移行を探す場所は、settings.py で MIGRATION_MODULES を使用してカスタマイズできます。とにかく、これはすべての移行 (新しいものだけでなく) がそこにある必要があることを意味します。Django をアップグレードするときに、元の移行をコピーして手動で更新する必要があります

移行 Es と競合しないように、専用のパッケージを作成できます。

MIGRATION_MODULES = {
     'django.contrib.auth' : 'myapp.auth_migrations',
     'myapp': 'myapp.migrations'  # this line is only to clarify. IT'S NOT NEEDED AT ALL 
}
于 2014-12-12T14:43:54.603 に答える