С JSF 2.0 вы можете присоединить слушателя к системному событию
<h:outputText value="#{ManagedBean.someProperty}">
<f:event type="preRenderView" listener="#{ManagedBean.loadSomeProperty}" />
</h:outputText>
. В качестве альтернативы вы можете заключить страницу JSF в тег f:view
<f:view>
<f:event type="preRenderView" listener="#{ManagedBean.loadSomeProperty}" />
.. jsf page here...
<f:view>
из документов по Использование подмножества полей в форме :
Установите editable = False в поле модели. В результате любая форма, созданная из модели через ModelForm, не будет включать это поле.
Вы можете определить подкласс поля пользовательской модели и переопределить метод formfield()
, чтобы вернуть поле с виджетом HiddenInput. См. документацию для пользовательских полей .
Если у вас есть доступ к шаблону, вы можете отобразить его, у него есть скрытое поле со следующим кодом:
{{ form.field_name.as_hidden }}
вместо стандартного:
{{ form.field_name }}
Хотя вы упомянули, что вы не можете использовать исключение в вашем случае, я думаю, что другие, которые встречают этот ответ (например, я, основываясь на названии), могут найти его полезным.
Можно выборочно скрывать поля, используя exclude
в ModelAdmin, вот фрагмент из того, над чем я работаю:
class ItemsAdmin(admin.ModelAdmin):
form = ItemsForm
actions = None
list_display = ('item_id', 'item_type', 'item_title', 'item_size', 'item_color',)
search_fields = ('item_id', 'item_title',)
inlines = [ImageInline,]
readonly_fields = ('disable_add_date','disable_remove_date',)
exclude = ('add_date', 'remove_date',)
###.............