1

django admin inline-models をモデルのようなクラスタリングから切り離す方法はありますか?

ちょっとしたコンテキスト: TextBlock と GalleryContainer の 2 つのインライン モデルを持つ Page という名前のモデルがあります。ページ管理エディターに追加された順序に基づいて、テンプレートで TextBlocks と GalleryContainers をレンダリングします。デフォルトの django-admin 表示は次のようになります。

django-admin 表示

次のように表示したいと思います。

  • ギャラリー コンテナ 1
  • テキストブロック 1
  • ギャラリーコンテナ2

しかし、私はそれを行う方法がわかりません。正しい方向への提案やナッジは大きな助けになります。前もって感謝します。(また、私の質問が理にかなっていることを願っています...)

4

1 に答える 1

0

列とギャラリーの間の関係が必要な場合は、モデルにそれが反映されている必要があります。したがって、正しく理解できれば、ページには名前と列があります。列には、テキスト、ギャラリー (オプション)、順序があります。

models.py:

class Page(models.Model):
   name = models.CharField(max_length=200)

class Gallery(models.Model):
   name = models.CharField(max_length=200)

class Column(models.Model):
   page = models.ForeignKey(Page)
   text = models.TextField()
   gallery = models.ForeignKey(Gallery, null=True, blank=True) # Optional
   ordering = models.IntegerField()

   class Meta:
       ordering = ('ordering', )

この例は、IntegerField によって順序付けが行われる方法を示しています。列が追加された瞬間に基づいて列を並べ替えたい場合は、置き換えます

ordering = models.IntegerField()

models.datetimeField(auto_now_add=True)

admin.py で:

class ColumnInline(admin.TabularInline): # or StackedInline
    model = Column

class PageAdmin(admin.ModelAdmin):
    inlines = [
        ColumnInline,
    ]

注:「ギャラリー表示名」を「名前」としてギャラリーに入れました。ギャラリーに一度だけ名前を付ける方が理にかなっています。ただし、ギャラリーが異なる名前の複数の場所にある場合は、Column モデルにフィールド (「gallery_display_name=models.CharField(max_length=200)」など) が必要です。

これはあなたの質問に対する答えですか?それが役立つことを願っています!

于 2012-04-06T17:11:59.790 に答える