In my continued
experimentation with the newforms-
admin branch of
Django, I wanted to figure out how to order fields of an inline. Looking at
the documentation for
inlines I saw there was not an
ordering
field.
I had thought that there was but it turns out I was just mistaken in the
object hierarchy. InlineModelAdmin
inherits from BaseModelAdmin
the same
as ModelAdmin
— I was thinking that InlineModelAdmin
inherited from
ModelAdmin
.
Therefore, I had to determine a way to accomplish this via some spelunking
through the code. At first, I thought I’d just create my own template by
inheriting or copying the tabular.html
template. After looking at it, I
determined that I didn’t want to figure out how to do a regroup
on
inline_admin_formset
or if even that was the proper way to try to order
things in that template.
After a few minutes in the code I realized that I could just subclass
BaseInlineFormset
and specify the fields that I wanted to order by (in this
example I will use start_time
and end_time
:
from django.contrib import admin
from django.newforms.models import BaseInlineFormset
class MyOrderedFormset(BaseInlineFormset):
def get_queryset(self):
qs = super(SessionInlineFormset, self).get_queryset()
return qs.order_by('start_time', 'end_time')
class MyOrderedInline(admin.TabularInline):
model = MyModel
extra = 1
formset = MyOrderedFormset
That’s it. Now after that section of inlines are ordered by start_time
and
end_time
.