Вы можете переопределить ModelAdmin.get_form
и изменить используемую форму, чтобы добавить поле по вашему выбору, заполненное всем, что вам нравится.Например:
#admin.py
class TestAdmin(admin.ModelAdmin):
fields = ['name','product']
def get_form(self, request, obj=None, **kwargs):
if obj.product:
# self.form.base_fields is an OrderedDict(field_name=form.Field, ...)
self.form.base_fields['product_description'] = forms.CharField(required=False, initial=obj.product.description)
self.form.base_fields['product_description'].widget.attrs['readonly'] = True
return super(TestAdmin, self).get_form(request, obj, **kwargs)
Это добавит поле ввода текста только для чтения в качестве последнего поля в вашей форме добавления.Если вы хотите, чтобы оно было размещено в другом месте в форме, вам нужно было бы выработать некоторую логику, чтобы перестроить self.form.base_fields
как новый OrderedDict
в том порядке, в котором вы хотите.