2012-04-05 12 views
1

モデルのようなクラスタリングからdjango adminのインラインモデルを切り離す方法はありますか?Django管理者のインラインモデルのカスタマイズ

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

  • ギャラリーコンテナ1
  • のTextBlock 1
  • ギャラリーコンテナ2

django-admin display

私はそれのように表示したいです

しかし、どうすればいいのかわかりません。適切な方向への提案や言葉遣いは大きな助けになります。前もって感謝します。 (私の質問が意味をなさないことを願っています...)

+0

ページが読み込まれた後、JSでこれらのブロックを移動する方が簡単だと思います – ilvar

答えて

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とによって行われる方法を示しています。

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

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

注:あなたがあなたのadmin.pyで

models.datetimeField(auto_now_add=True) 

ordering = models.IntegerField() 

を交換彼らは追加どこ瞬間に基づいて列を注文したい場合は、私はあなたの「ギャラリーを置きますギャラリーの '表示名'を '名前'として表示します。ギャラリーに一度だけ名前を付けるほうが意味があります。しかし、ギャラリーが異なる名前の場所にある場合は、列モデルでフィールド(「gallery_display_name = models.CharField(max_lenght = 200)」など)が必要です。

これはあなたの質問に対する回答ですか?私はそれが助けて欲しい!

関連する問題