В вашем вопросе есть две вещи для ответа.
1.Поля формы только для чтения
Не существует, как в Django, но вы можете реализовать его самостоятельно, и этот пост может помочь.
2.Другая форма для добавления / изменения
Я полагаю, вы ищете решение в контексте сайта администратора (в противном случае просто используйте 2 разные формы в своих представлениях).
Вы можете в конечном итоге переопределить add_view
или change_view
в вашем ModelAdmin
и используйте другую форму в одном из представлений, но я боюсь, что вы получите ужасную загрузку дублированного кода.
Другое решение, которое я могу придуматьof, является формой, которая изменит свои поля при создании экземпляра, когда передается параметр instance
(то есть: регистр edit ).Предполагая, что у вас есть класс ReadOnlyField
, который даст вам что-то вроде:
class MyModelAdminForm(forms.ModelForm):
class Meta:
model = Stuff
def __init__(self, *args, **kwargs):
super(MyModelAdminForm, self).__init__(*args, **kwargs)
if kwargs.get('instance') is not None:
self.fields['title'] = ReadOnlyField()
Здесь поле title
в модели Stuff
будет доступно только для чтения на странице измененийАдминистратор сайта, но редактируемый в форме создания.
Надеюсь, это поможет.