Reputation: 2230
admin.py
class MovieItemInline(AjaxSelectAdminTabularInline):
model = MovieItem
ordering = ['-date']
class MovielistAdmin(ModelAdminBase, AjaxSelectAdmin):
inlines = (MovieItemInline, )
admin.site.register(Movielist, MovielistAdmin)
models.py
class MovieItem(Model):
title = CharField(default="")
view_number = IntegerField(default=0)
price = IntegerField(default=0)
date = IntegerField(default=0)
class Movielist(Model):
title = CharField(default="")
display_order = CharField(default="date")
MovieItemInline is MovielistAdmin's inline attribute, I wanna sort MovieItem, for example, if Movielist.display_order equals "date", then sort MovieItem by MovieItem.date. if Movielist.display_order equals "price", then sort MovieItem by MovieItem.price. if Movielist.display_order equals "view_number", then sort MovieItem by MovieItem.view_number. What should I do? Is django support?
Upvotes: 2
Views: 954
Reputation: 12086
You can override the get_ordering
method inside MovieItemInline
class.
from django.urls import resolve
def get_ordering(self, request):
# get Movielist object instance from request
object_id = resolve(request.path).args[0]
# retrieve Movielist object
movie_list = MovieList.objects.get(id=object_id)
# modify ordering based on movie_list display_order value
if movie_list.display_order == 'date':
return ['-date']
elif movie_list.display_order == 'price':
return ['-price']
elif movie_list.display_order == 'view_number':
return ['-view_number']
# fallback value if non of the above match
return ['-title']
Upvotes: 3