How to display a custom form with multiple widgets for a field in Django admin?

The Django docs say you can add a form to the admin UI:

class ArticleAdmin(admin.ModelAdmin):
    form = MyArticleAdminForm

I want a custom editing UI for a special field in my model, where I display multiple widgets. (It's not exactly the same, but an analogy might be an old-school hex editor widget, where you want fine editing control on a big blob of information.) Perhaps I could break the multiple values into multiple database objects and use an InlineAdmin, but I have app-specific reasons to not do that.

I thought I'd use a Form object with some custom fields, but Django says it must be a ModelForm:

<class 'myapp.admin.MyAdmin'>: (admin.E016) The value of 'form' must inherit from 'BaseModelForm'.

Is it possible to display multiple widgets (basically a very custom form) for a single model value in Django admin?

EDIT: It looks like MultiWidget might work? I'm gonna look into that. Also, this question is related. That suggests I should just change the widget on the field.

The answer was to make a MultiWidget, overriding:

  • __init__ to set up the widgets
  • decompress and value_from_datadict to unpack and pack the field value
  • template_name to render my own template
  • get_context to make the context for the template
Back to Top