Есть ли способ сделать list_editable необязательным на основе каждого объекта? Например, атрибут полей readonly имеет этот параметр, который не влияет на changelist_view.Django условный администратор list_editable
class MyAdmin(admin.ModelAdmin):
readonly_fields = ('foo',)
def get_readonly_fields(self, request, obj=None):
fields = super(MyAdmin, self).get_readonly_fields(request, obj=obj)
if obj.status == 'CLOSED':
return fields + ('bar',)
return fields
То же самое можно сделать для list_display и некоторых других атрибутов. Кажется, что не существует метода get_list_editable_fields.
Я хочу, чтобы некоторые из строк были неизменяемыми, но, кроме того, что они поднимали вульгарную ошибку, похоже, не работают. Я не нашел никакой документации об атрибуте
Как можно будет визуализировать виджет через list_display getter?
class MyAdmin(admin.ModelAdmin):
list_display = ('get_bar',)
list_editable = ('get_bar',)
def get_bar(self, obj):
return widget or str(obj.bar) # ???
get_bar.allow_tags = True
обновления с использованием обратной связи Аласдера по:
def get_changelist_formset(self, request, **kwargs):
"""
Returns a FormSet class for use on the changelist page if list_editable
is used.
"""
# I run through this code for each row in the changelist, but there's nothing in kwargs, so I don't know how to use the instance as a guide to which fields should be in list_editable?
defaults = {
"formfield_callback": partial(self.formfield_for_dbfield, request=request),
}
defaults.update(kwargs)
return modelformset_factory(
self.model, self.get_changelist_form(request), extra=0,
fields=self.list_editable, **defaults
)
Я не понимаю, как получить текущий экземпляр в методе, я бегу через метод для каждой строки, но kwargs является пусто? см. мой обновленный вопрос – trb
Я не уверен, что ответ, вы довольно глубоко внутри кода администратора! Возможно, вам придется переопределить 'get_changelist_form', а также/вместо этого. Удачи! – Alasdair
Это поставило меня на правильный путь. Я закончил тем, что дважды зарегистрировал модель на админе (для которой требуется прокси-модель) и создал собственный набор правил администратора. Это требование действительно попадает в границы администратора django :-) – trb