python - model教學 - django admin changelist_view



Django管理員的嵌套內聯? (4)

到目前為止,沒有“內置”方法在django.contrib.admin中嵌套內聯(內嵌內聯)。 通過擁有自己的ModelAdmin和InlineModelAdmin子類來實現這種功能,可以實現這樣的功能。 有關如何實現此功能的建議,請參閱此故障單http://code.djangoproject.com/ticket/9025上的修補程序。 您還需要提供自己的模板,這些模板將在頂級內聯和子內聯中進行嵌套迭代。

https://ffff65535.com

好吧,我有一個相當簡單的設計。

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項目,選擇相關的Update,添加Media項目,然後點擊save - 這很好。 但是沒有辦法在一個地方看到屬於給定更新的所有帖子,這反過來意味著你不能在更新中瀏覽帖子。 這對最終用戶來說真的很混亂。

幫幫我?


我使用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-inlineshttps://github.com/Soaa-/django-nested-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-admin