Как я позволяю полям быть заполненными пользователем во время создания объекта ("добавьте" страницу), и затем сделанный только для чтения при доступе на уровне страницы "изменения"?
Там две вещи, которые нужно решить в вашем вопросе.
Не существует, как в Django, но вы можете реализовать его самостоятельно, и это сообщение в блоге может помочь.
Я думаю, вы ищете решение в контексте административного сайта (в противном случае просто используйте две разные формы в ваших представлениях).
В конечном итоге вы можете переопределить add_view
или change_view
в своем ModelAdmin
и использовать другую форму в одном из представлений, но я боюсь, что вы закончите с ужасной загрузкой дублированного кода.
Еще одно решение, которое я могу придумать, - это форма, которая будет изменять свои поля при создании экземпляра, когда передается параметр экземпляра (то есть: случай 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
будет доступно только для чтения. на странице изменения админки, но редактируется в форме создания.
Надеюсь, что это поможет.
Один из вариантов - переопределить или заменить шаблон change_form для этой конкретной модели.
Вы можете отредактировать метод сохранения этой модели, чтобы удовлетворить такое требование. Например, вы можете проверить, содержит ли уже поле какое-либо значение, если оно есть, игнорировать новое значение.