LINUX.ORG.RU

Как модель в админке джанги сделать полностью ридонли?

 ,


0

2

Всем привет!

Собственно, сабж. Нужно сделать так, чтобы в админке некий объект можно было создавать, удалять, но нельзя было редактировать.

Нашел вот это, но у меня че-то не заработало. Вставлял так:

class RegistrationRequestChangeForm(forms.ModelForm, ReadOnlyAdminMixin):
    class Meta:
        model=RegistrationRequest
        fields = ( 'activationKey', 'serial_number', 'email')

ЧЯДНТ?

★★
class RegistrationRequestChangeForm(forms.ModelForm):

    ...

    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return ()
        else:
            return ('activationKey', 'serial_number', 'email')

или без условия на is_superuser, если нужно для всех

paganmind
()
Ответ на: комментарий от paganmind
class RegistrationRequestChangeForm(forms.ModelForm, ReadOnlyAdminMixin):
    class Meta:
        model=RegistrationRequest
        fields = ()
    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return ()
        else:
            return ('activationKey', 'serial_number', 'email')

Вот так у меня вообще все поля перестали показываться. А если убрать fields, то не запускается - джанга запрещает.

aido ★★
() автор топика
Ответ на: комментарий от aido

Вы делате действия для админки, тогда почему наследуютесь от forms.ModelForm? ReadOnlyAdminMixin не нужен тоже

вот мой класс как пример:

class PhoneAdmin(admin.ModelAdmin):
    fields = ('phonenumber', 'name', 'callerid', 'callerid_name', 'context',
        'old_phonenumber', 'forward', 'cellular'
    )
    list_display = ('phonenumber', 'name', 'callerid', 'callerid_name',
        'context', 'old_phonenumber', 'forward', 'cellular'
    )
    list_filter = ('context', 'forward')
    ordering = ('phonenumber',)

    # Или пишем так, если поля одинаковые
    # readonly_fields = ('phonenumber',)

    # Или вот так, если нужно их получать динамически в зависимости от request

    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return ()
        else:
            return ('phonenumber',)
paganmind
()

Попробуй переопредели change_view(), не разрешая редактировать объект.

gruy ★★★★★
()
Ответ на: комментарий от paganmind

Так нет же. мне нужно при создании оставить все поля редактируемыми, а при редактировании - все поля readonly.

aido ★★
() автор топика
Ответ на: комментарий от aido

Ну так проверяй obj. Если он None, то обьект создается, в другом случае - редактируется

paganmind
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.