21👍
As of now there is no “built-in” way to have nested inlines (inline inside inline) in django.contrib.admin. Pulling something like this off is possible by having your own ModelAdmin and InlineModelAdmin subclasses that would enable this kind of functionality. See the patches on this ticket http://code.djangoproject.com/ticket/9025 for ideas on how to implement this. You’d also need to provide your own templates that would have nested iteration over both the top level inline and it’s child inline.
8👍
There is now this egg available, which is a collation of the relevant patches mentioned in the other answer:
- [Django]-Django admin: can I define fields order?
- [Django]-Get class name of django model
- [Django]-How to filter objects for count annotation in Django?
6👍
I have done this using https://github.com/theatlantic/django-nested-admin, for the following Data structure:
- Contest
- Judges
- Contestants
- Singers
- Songs
My admin.py
file:
from django.contrib import admin
import nested_admin
from .models import Contest, Contestant, Judge, Song, Singer
class SongInline(nested_admin.NestedTabularInline):
model = Song
extra = 0
class SingerInline(nested_admin.NestedTabularInline):
model = Singer
extra = 0
class ContestantInline(nested_admin.NestedTabularInline):
model = Contestant
inlines = [SongInline, SingerInline]
extra = 0
class JudgeInline(nested_admin.NestedTabularInline):
model = Judge
extra = 0
class ContestAdmin(nested_admin.NestedModelAdmin):
model = Contest
inlines = [ContestantInline, JudgeInline]
extra = 0
admin.site.register(Contest, ContestAdmin)
https://github.com/theatlantic/django-nested-admin appears to be much more actively maintained than the other apps already mentioned (https://github.com/BertrandBordage/django-super-inlines and https://github.com/Soaa-/django-nested-inlines)
- [Django]-Adding REST to Django
- [Django]-How to set ForeignKey in CreateView?
- [Django]-Django: Add response header when using render or render_to_response
3👍
I have just ran into this issue as well… Seems this thread which contains the request for the nested inlines feature (https://code.djangoproject.com/ticket/9025#no2) has been updated with further information.
A custom made app called “django-super-inline” has been released. More details here: https://github.com/BertrandBordage/django-super-inlines
Installation and usage instructions below.
Hope this is useful for whomever comes across this.
- [Django]-Django: how to get format date in views?
- [Django]-How to update user password in Django Rest Framework?
- [Django]-ImportError: No module named 'django.core.urlresolvers'
2👍
I ran into a similar issue to this. My approach was to make an UpdateAdmin that held inlines for both Media and Post… it basically just makes it so you have a list of all of the media entries followed by all of the posts in an update.
class MediaInline(admin.StackedInline):
model = Media
class PostInline(admin.StackedInline):
model = Post
class PostAdmin(admin.ModelAdmin):
inlines = [MediaInline,]
class UpdateAdmin(admin.ModelAdmin):
inlines = [MediaInline,PostInline]
It isn’t an ideal solution but it works for a quick and dirty work around.
- [Django]-Django: accessing session variables from within a template?
- [Django]-Django using get_user_model vs settings.AUTH_USER_MODEL
- [Django]-Include intermediary (through model) in responses in Django Rest Framework
0👍
Use django-nested-admin which is the best package to do nested inlines.
First, install "django-nested-admin":
pip install django-nested-admin
Then, add "nested_admin" to "INSTALLED_APPS" in "settings.py":
# "settings.py"
INSTALLED_APPS = (
# ...
"nested_admin", # Here
)
Then, add "path(‘_nested_ad…" to "urlpatterns" in "urls.py":
# "urls.py"
from django.urls import include, path
urlpatterns = [
# ...
path('_nested_admin/', include('nested_admin.urls')), # Here
]
Finally, extend "NestedTabularInline" with "MediaInline()" and "PostInline()" classes and extend "NestedModelAdmin" with "UpdateAdmin()" class in "admin.py" as shown below:
# "admin.py"
from .models import Media, Post, Update
from nested_admin import NestedTabularInline, NestedModelAdmin
class MediaInline(NestedTabularInline):
model = Media
class PostInline(NestedTabularInline):
model = Post
inlines = [MediaInline]
@admin.register(Update)
class UpdateAdmin(NestedModelAdmin):
inlines = [PostInline]
- [Django]-Accessing dictionary by key in Django template
- [Django]-How to add a sortable count column to the Django admin of a model with a many-to-one relation?
- [Django]-How do I output HTML in a message in the new Django messages framework?