Ответ 1
из документов на Использование подмножества полей в форме:
Установите значение editable = False в поле модели. В результате любая форма, созданная с помощью модели через ModelForm, не будет включать это поле.
А назад я сделал класс модели. Я сделал несколько ModelForms, и он работал красиво.
Недавно мне пришлось добавить в него еще одно необязательное поле (пусто = True, null = True), чтобы мы могли хранить некоторые данные отношений между пользователями. Это, по сути, реферальная система.
Проблема заключается в том, что добавление этого нового поля означает, что поле реферала появляется там, где я не изменил ModelForms, чтобы исключить его. Обычно это означало бы дополнительные 10 минут, проходящие и исключающие их, но в этом случае из-за политики управления проектами из-под моего контроля я контролирую только Модели для этого приложения.
Можно ли:
из документов на Использование подмножества полей в форме:
Установите значение editable = False в поле модели. В результате любая форма, созданная с помощью модели через ModelForm, не будет включать это поле.
Если у вас есть доступ к шаблону, вы можете отобразить его скрытое поле со следующим кодом:
{{ form.field_name.as_hidden }}
вместо стандарта:
{{ form.field_name }}
Вы можете определить подклассу настраиваемого поля модели и переопределить метод formfield()
, чтобы вернуть поле с виджетами HiddenInput. См. документацию для настраиваемых полей.
Хотя вы упомянули, что вы не можете использовать исключение в своем случае, я думаю, что другие, которые сталкиваются с этим ответом (например, я, на основе названия), могут оказаться полезными.
В ModelAdmin можно выборочно скрыть поля с помощью exclude
, вот фрагмент из того, над чем я работаю:
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',)
###.............