0

admin-form必要性を定義し、オブジェクトadmin-fieldsetsに依存するにはどうすればよいですか? request例えば:

私はいくつかのモデルを持っています:

# models.py
class Shop(models.Model):
    name = models.CharField(...)
    description = models.TextField(...)
    params = models.SomeField(...)

そして、私は( , , )user.profileとしてフィールドを持っています。たとえば、管理インターフェイスの異なるフィールドセットを取得するために依存したいです:roleadministratorownerselleruser.profile.role

# admin.py
class ShopAdmin(admin.ModelAdmin):

    def custom_get_fieldset_and_form_method(self, request, *args, **kwargs):
        if request.user.profile.role == 'administator':
            self.fieldsets = self.get_default_fieldset_method(self, *args, **kwargs)
        elif request.user.profile.role == 'owner':
            self.fieldsets = [
            (
                'Owner Panel', {'fields': ('name', 'description')},
            ),
            (
                'Hidden fields', {'classes':('collapse',),'fields': (`params`,)},
            )]
        else:
            # in other, i want to hide `params` field from form
4

1 に答える 1

3

モデル adminのget_fieldsets()メソッドをオーバーライドする必要があります。このメソッドはrequest、引数の 1 つとしてオブジェクトを受け取ります。

# NOT TESTED
class ShopAdmin(admin.ModelAdmin):
    def get_fieldsets(self, request, obj=None):
        profile = YourProfileModel.objects.get(user=request.user)

        if profile.role == 'administrator':
            fieldsets = self.get_fieldsets(request, obj)
        elif profile == 'owner':
            fieldsets = (
                ('Owner Panel', {'fields': ('name', 'description',)}),
                ('Hidden fields', {'classes':('collapse',),'fields': ('params',)})
            )
        else:
            # additional fieldsets

        return fieldsets

ユーザー プロファイルに基づいて特定のフィールドを含める/除外する場合は、モデル管理者のget_form()メソッドをオーバーライドする必要があります。これにより、リクエストにアクセスできるようになります。

于 2013-10-22T04:21:47.033 に答える