Как исключить поля в get_fieldsets () в зависимости от типа пользователя в админке Django - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь использовать get_fieldsets для организации страниц модели администратора. Использование fieldsets довольно приятно, но я застрял в том, как исключить некоторые поля. В настоящее время я использовал условие if для проверки типа пользователя, а затем возвращаю различные fieldsets в зависимости от типа пользователя. Из-за этого у меня повторяются одни и те же коды. Есть ли способ исключить несколько полей в get_fieldsets?

admin.py

class StoreAdmin(admin.ModelAdmin):
    ...
    def get_fieldsets(self, request, obj=None):
        fieldsets = copy.deepcopy(super(StoreAdmin, self).get_fieldsets(request, obj))
        if request.user.is_superuser:
            return (
                [
                    ('Basic Information', {
                        'fields': (
                            ('status', 'review_score', 'typ'),
                            ('businessName', 'relatedName'),
                            ('mKey'),
                        )
                    }),
                    ('Additional Options', {
                        'fields': (
                            ('affiliate_switch', 'is_affiliated', 'affiliate',),
                        )
                    }),
                ]
            )
        else:
            return (
                [
                    ('Basic Information', {
                        'fields': (
                            ('status', 'review_score', 'typ'),
                            ('businessName', 'relatedName'),
                            ('mKey'),
                        )
                    }),
                ]
            )

1 Ответ

0 голосов
/ 10 января 2019

Если вы хотите исключить только поля, вы можете использовать get_fields вместо следующего:

def get_fields(self, request, obj=None):
    fields = super(ClientAdmin, self).get_fields(request, obj)
    if obj:
        fields_to_remove = []
            if request.user.is_superuser:
                fields_to_remove = ['field1', 'field2', 'etc', ]
            for field in fields_to_remove:
                fields.remove(field)
        return fields

Edit: Та же логика может быть использована для get_fieldsets

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...