[英]Nested inlines in the Django admin?
好吧,我有一個相當簡單的設計。
class Update(models.Model):
pub_date = models.DateField()
title = models.CharField(max_length=512)
class Post(models.Model):
update = models.ForeignKey(Update)
body = models.TextField()
order = models.PositiveIntegerField(blank=True)
class Media(models.Model):
post = models.ForeignKey(Post)
thumb = models.ImageField(upload_to='frontpage')
fullImagePath = models.ImageField(upload_to='frontpage')
有沒有一種簡單的方法可以讓用戶在一個頁面上創建全部更新?
我想要的是讓用戶能夠進入管理界面,添加新的更新,然后在編輯更新時添加一個或多個帖子,每個帖子都有一個或多個媒體項目。 此外,我希望用戶能夠在更新中重新排序帖子。
我當前的嘗試在 admin.py 中有以下內容:
class MediaInline(admin.StackedInline):
model = Media
class PostAdmin(admin.ModelAdmin):
inlines = [MediaInline,]
這讓用戶添加一個新的 Post 項目,選擇相關的更新,將媒體項目添加到其中,然后點擊保存 - 這很好。 但是沒有辦法在一個地方查看屬於給定更新的所有帖子,這反過來意味着您不能在更新中使用帖子。 對於最終用戶來說,這真的很令人困惑。
幫助?
到目前為止,在 django.contrib.admin 中沒有“內置”方式來嵌套內聯(內聯內聯)。 通過擁有自己的 ModelAdmin 和 InlineModelAdmin 子類來啟用這種功能,可以實現這樣的功能。 請參閱這張票上的補丁http://code.djangoproject.com/ticket/9025以獲取有關如何實現此功能的想法。 您還需要提供自己的模板,這些模板將在頂級內聯和子內聯上進行嵌套迭代。
現在有這個雞蛋可用,它是另一個答案中提到的相關補丁的整理:
對於以下數據結構,我已經使用https://github.com/theatlantic/django-nested-admin完成了此操作:
我的admin.py
文件:
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似乎比已經提到的其他應用程序更積極地維護( https://github.com/BertrandBordage/django-super-inlines和https://github .com/Soaa-/django-nested-inlines )
我剛剛也遇到了這個問題......似乎這個包含嵌套內聯功能請求的線程( https://code.djangoproject.com/ticket/9025#no2 )已經更新了更多信息。
一個名為“django-super-inline”的定制應用程序已經發布。 更多細節在這里: https ://github.com/BertrandBordage/django-super-inlines
安裝和使用說明如下。
希望這對遇到此問題的人有用。
我遇到了與此類似的問題。 我的方法是制作一個 UpdateAdmin,它為 Media 和 Post 保存內聯......它基本上只是這樣,你有一個所有媒體條目的列表,然后是更新中的所有帖子。
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]
這不是一個理想的解決方案,但它適用於快速而骯臟的工作。
使用django-nested-admin這是做嵌套內聯的最佳包。
首先,安裝“django-nested-admin” :
pip install django-nested-admin
然后,在“ settings.py ”中將“nested_admin”添加到“INSTALLED_APPS ”:
# "settings.py"
INSTALLED_APPS = (
# ...
"nested_admin", # Here
)
然后,在"urls.py"中添加"path('_nested_ad..."到"urlpatterns " :
# "urls.py"
from django.urls import include, path
urlpatterns = [
# ...
path('_nested_admin/', include('nested_admin.urls')), # Here
]
最后,在“admin.py”中用“MediaInline()”和“PostInline()”類擴展“NestedTabularInline” ,用“UpdateAdmin()”類擴展“NestedModelAdmin ” ,如下所示:
# "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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.