さて、私はかなりシンプルなデザインをしています。
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')
ユーザーがすべてのページで更新を作成できるようにする簡単な方法はありますか?
私が必要とするものwantは、ユーザーが管理インターフェイスにアクセスして新しい更新を追加し、更新の編集中に1つ以上の投稿を追加できるようにすることです。各投稿には1つ以上のメディアアイテムがあります。さらに、ユーザーが更新内で投稿を並べ替えられるようにしたいと考えています。
私の現在の試みはadmin.pyに次のようにしています:
class MediaInline(admin.StackedInline):
model = Media
class PostAdmin(admin.ModelAdmin):
inlines = [MediaInline,]
これで、ユーザーが新しい投稿アイテムを追加し、関連する更新を選択し、それにメディアアイテムを追加して、保存をクリックします。これで問題ありません。ただし、特定の更新に属するすべての投稿を1か所で確認する方法はありません。つまり、更新内で投稿を操作できないということです。これは、エンドユーザーにとって非常に混乱します。
助けて?
現在のところ、Django.contrib.adminにインラインをインライン化する(ビルトイン)方法はありません。このような機能を有効にする独自のModelAdminおよびInlineModelAdminサブクラスを用意することで、このようなものを取り除くことができます。これを実装する方法のアイデアについては、このチケットのパッチ http://code.djangoproject.com/ticket/9025 を参照してください。また、トップレベルのインラインとその子のインラインの両方で反復をネストする独自のテンプレートを提供する必要があります。
これで、このEggが利用可能になりました。これは、他の回答で言及されている関連パッチの照合です。
私もこの問題に遭遇しました...ネストされたインライン機能( https://code.djangoproject.com/ticket/9025#no2 )のリクエストを含むこのスレッドは、詳細情報を更新しました。
「Django-super-inline」というカスタムアプリがリリースされました。詳細はこちら: https://github.com/BertrandBordage/Django-super-inlines
以下のインストールと使用方法の説明。
これがこれに遭遇した人にとって便利であることを願っています。
私はこれに似た問題に遭遇しました。私のアプローチは、MediaとPostの両方をインラインで保持するUpdateAdminを作成することでした...基本的には、すべてのメディアエントリのリストに更新のすべての投稿が続くようにするだけです。
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]
これは理想的なソリューションではありませんが、すばやく汚れた作業に役立ちます。
私は 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 )