Допустим, поле, о котором идет речь, special_field
.
Вот как вы это сделаете (из этого связанного ответа ):
class RequestForm(forms.ModelForm):
trac = forms.URLField(min_length=400, required=False)
impacted_users = forms.ModelMultipleChoiceField(queryset=Group.objects.all(), widget=forms.CheckboxSelectMultiple)
formfield_overrides = {
}
def __init__(self, special_field_starting_value=None, *args, **kwargs):
super(RequestForm,self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if not (instance and instance.id):
self.fields['special_field'].widget.attrs['readonly'] = True
self.fields['special_field'].initial = special_field_starting_value
class Meta:
model = Request
Этобудет работать как в режиме администратора, так и в обычном режиме.
Полное раскрытие : на самом деле я его не проверял, но, если ответ, с которым я связан, все еще действителен, то код, который янаписано на основании этого также должно быть действительным.