2

これを行うことでアプリのラベルを変更しました

class Model(models.Model):
     pass

     class Meta:
          app_label = 'App Name'
          db_table = 'app_table'

テーブルとアプリケーションはすでに存在します。問題は、管理インターフェースに移動すると、スーパーユーザーのみがアプリを表示でき、他のユーザーは表示できないことです。他のユーザーにアクセス許可を追加しようとしましたが、アクセス許可ボックスに表示されません。 。

前もって感謝します!

4

4 に答える 4

2

これは間違いなく Django のバグです。パーミッション app_label と contenttype app_label の間に競合があり、管理者でパーミッションが一致しません。これが修正されるまでの回避策として、単に明示的にアクセス許可を付与することができますModelAdmin:

class MyModelAdmin(admin.ModelAdmin):
    ...
    def has_add_permission(self, request):
        return request.user.has_perm('app_label.add_modelclass')

    def has_change_permission(self, request, obj=None):
        return request.user.has_perm('app_label.change_modelclass')

    def has_delete_permission(self, request, obj=None):
        return request.user.has_perm('app_label.delete_modelclass')

app_labelはルート モデルのでapp_labelありmodelclass、プロキシ モデルの小文字の名前です。

于 2011-05-24T16:48:46.070 に答える
0

これはあなたのために働くかもしれません:

Model クラスを通常どおりに定義します。つまり、次のようになります。

class MyModel(models.Model):
     pass

     class Meta:
          db_table = 'app_table'

次に、プロキシ モデルを作成し、そのプロキシ モデルのアプリ ラベルを次のような 2 番目のモデルに変更します。

class MyProxyModel(MyModel):
     pass

     class Meta:
          proxy = True
          app_label = 'app_name'

注: アプリのラベルはすべて小文字で、スペースの代わりにアンダースコアを含める必要があります。Django はアンダースコアを置き換え、アプリのラベルを自動的に大文字にします。

次に、作成した ModelAdmin が何であれ、プロキシ モデルに登録します。

admin.site.register(MyProxyModel,MyModelAdmin)

これにより、MyModelAdmin が管理インターフェイスの別のアプリ ラベルの下に表示されるようになります。現在、テストする環境がないため、これでアクセス許可の問題が修正されるとは確信していませんが、他のラベルの下に表示されます。

于 2011-02-12T01:57:11.587 に答える
0

ここで意図されているように app_label を使用しているかどうかはわかりません。モデルの名前の読みやすさを改善しようとしている場合は、モデルのメタ クラスでverbose_nameを使用します。

app_labelには最高のドキュメントがないようですが、私が知る限り、機械で読み取り可能な名前であるはずです。

于 2011-02-11T16:54:17.230 に答える
0

app_labelデータベース テーブル名と contenttype エントリに影響します。モデルを他のアプリケーションに移動するかのように。パーミッションは contenttypes に依存します。Syncdb は contenttypes を修正し、新しいテーブルを作成し、新しい権限エントリを作成します。他のアプリに「移動」されたそのモデルの既存のユーザー/グループに権限を追加する必要があります。

于 2011-02-11T17:28:42.437 に答える