Либо в вашем ModelAdmin.formfield_overrides, либо в ModelAdmin.formfield_for_dbfield, либо в пользовательской ModelForm, вам нужно назначить пользовательский виджет для поля name_slug, которое просто отображает значение поля, а не отображает ввод формы HTML. Вы можете найти именно такой виджет здесь .
РЕДАКТИРОВАТЬ : я не буду вдаваться в подробности создания пользовательского виджета, так как вы можете просто использовать тот, на который я ссылался выше. Чтобы включить этот виджет для всех SlugField в модели, проще всего использовать formfield_overrides :
class PageAdmin(admin.ModelAdmin):
formfield_overrides = {
models.SlugField: {'widget': ReadOnlyWidget},
}
Если у вас есть несколько полей SlugFields в вашей модели и вы хотите применить ReadOnlyWidget только к одному из них, вы должны переопределить метод formfield_for_dbfield:
class PageAdmin(admin.ModelAdmin):
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'name_slug':
kwargs['widget'] = ReadOnlyWidget
return super(PageAdmin, self).formfield_for_dbfield(db_field, **kwargs)
Вы также можете создать полностью настраиваемую ModelForm для своей модели и назначить ее атрибуту формы вашего ModelAdmin, но в этом нет необходимости, если вы не выполняете более глубокие настройки.