3

すべての子クラスに継承される抽象モデル クラスにいくつかのカスタム アクセス許可を定義したいのですが、サブクラス化されたモデル タイプに適用できる汎用オブジェクト名をアクセス許可に与えるのではなく、本質的に次のverbose_name_pluralプロパティを使用したいと考えています。パーミッションの名前と説明の一部としての子モデル (例: ('view_classname', 'Can view classname'))、Django のデフォルトの動作をエミュレートします。

したがって、私がやりたいことは次のようなものです(verbose_name_pluralこのコンテキストでは定義されていないため、機能しません):

class AbstractModel(models.Model):
    class Meta:
        abstract = True
        permissions = (
            (u'view_%ss' % verbose_name_plural, u'Can view %s' % verbose_name_plural),
        )

(この問題はhttp://code.djangoproject.com/ticket/10686でも説明されており、これにはパーミッション定義の動的置換を実装するパッチが含まれています%(class)sが、このパッチは受け入れられず、私の実稼働環境では Django にパッチを適用できません。 .)

4

3 に答える 3

0

抽象モデル クラスの代わりにクラス デコレータを使用してこれを実現できますか?

def with_view_perm(cls):
    vn = cls.Meta.verbose_name_plural
    perms = (('view_%s' % vn, 'Can view %s' % vn),)
    cls.Meta.perms += perms
    return cls

@with_view_perm
class Child(models.Model):
    class Meta:
        verbose_name_plural = 'children'
        perms = (('change_children', 'Can change children'),)
于 2011-03-17T08:07:45.473 に答える