web-dev-qa-db-ja.com

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')

ユーザーがすべてのページで更新を作成できるようにする簡単な方法はありますか?

私が必要とするものwantは、ユーザーが管理インターフェイスにアクセスして新しい更新を追加し、更新の編集中に1つ以上の投稿を追加できるようにすることです。各投稿には1つ以上のメディアアイテムがあります。さらに、ユーザーが更新内で投稿を並べ替えられるようにしたいと考えています。

私の現在の試みはadmin.pyに次のようにしています:

class MediaInline(admin.StackedInline):
    model = Media

class PostAdmin(admin.ModelAdmin):
    inlines = [MediaInline,]

これで、ユーザーが新しい投稿アイテムを追加し、関連する更新を選択し、それにメディアアイテムを追加して、保存をクリックします。これで問題ありません。ただし、特定の更新に属するすべての投稿を1か所で確認する方法はありません。つまり、更新内で投稿を操作できないということです。これは、エンドユーザーにとって非常に混乱します。

助けて?

32
Cody Hatch

現在のところ、Django.contrib.adminにインラインをインライン化する(ビルトイン)方法はありません。このような機能を有効にする独自のModelAdminおよびInlineModelAdminサブクラスを用意することで、このようなものを取り除くことができます。これを実装する方法のアイデアについては、このチケットのパッチ http://code.djangoproject.com/ticket/9025 を参照してください。また、トップレベルのインラインとその子のインラインの両方で反復をネストする独自のテンプレートを提供する必要があります。

15
Vasil

これで、このEggが利用可能になりました。これは、他の回答で言及されている関連パッチの照合です。

https://github.com/theatlantic/Django-nested-admin

5
GreenAsJade

私もこの問題に遭遇しました...ネストされたインライン機能( https://code.djangoproject.com/ticket/9025#no2 )のリクエストを含むこのスレッドは、詳細情報を更新しました。

「Django-super-inline」というカスタムアプリがリリースされました。詳細はこちら: https://github.com/BertrandBordage/Django-super-inlines

以下のインストールと使用方法の説明。

これがこれに遭遇した人にとって便利であることを願っています。

enter image description here

3
Aivoric

私はこれに似た問題に遭遇しました。私のアプローチは、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]

これは理想的なソリューションではありませんが、すばやく汚れた作業に役立ちます。

2
carruthd

私は 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

1
Li-Wen Yip