2011-12-29 5 views
0

特定のdbテーブルに対してdjango adminのグループ列が必要です。私は、サンプルのテーブル '学生'列id、first_name、last_name、address1、address2、address3を持っていきます。だから、グループ分けは次のようになります。Django - django管理セクションの列をグループ化する

ID - > ID

NAME - セットのラベルを取得するには、このの>アドレス1、アドレス2、アドレス3

目的 - > FIRST_NAMEは、

アドレスをLAST_NAME私はテーブルからデータの行を表示する列の。

--------------------------------------------------------------------------------- 
| ID | NAME     | ADDRESS          | 
--------------------------------------------------------------------------------- 
| ID | First Name | Last Name | Address 1  | Address 2  | Address 3 | 
--------------------------------------------------------------------------------- 
| 1 | Ron  | DCunha | 1st Cross  | Valencia  | Mangalore | 
--------------------------------------------------------------------------------| 
| 2 | Akash  | Attavar | Mark Street  | Attavar   | Mangalore | 
---------------------------------------------------------------------------------

私はadmins.pyでこれを達成できなければなりません(admin.ModelAdminを拡張するクラスを書くことで):私は、Djangoの管理セクションにStudentテーブルのために取り出された行を確認するときに、私はこのように表示されますList_displayタプルを使用して、私が見たいカラムをリストアップすることができます。しかし、列をグループ化する方法はわかりません。

答えて

1

これを行うには、あなたは、単にあなたが望む適切な表示を返し、あなたのモデルやModelAdminの上のメソッドを作成します...私を助け、その後、あなたのlist_display(それが取るのフィールド名にそのメソッド名を使用してくださいまたは呼び出し可能)。

class MyModelAdmin(admin.ModelAdmin): 
    ... 
    list_display = ('id', 'full_name') 

    ... 

    def full_name(self, obj): 
     return u'%s %s' % (obj.first_name, obj.last_name) 

たり、Model(ディスプレイがそうでないModelAdminを使用し、管理者以外のシナリオで有用であれば良い)で:

class MyModel(models.Model): 
    ... 
    def get_full_name(self): 
     return u'%s %s' % (self.first_name, self.last_name) 

class MyModelAdmin(admin.ModelAdmin): 
    ... 
    list_display = ('id', 'get_full_name') 

あなたはそれが注文可能になりたい場合は、あなたが定義する必要がありadmin_order_fieldこの方法で、しかし、あなたは順序のために使用する1つのフィールドを選択する必要があります:

def full_name(self, obj): 
    return u'%s %s' % (obj.first_name, obj.last_name) 
full_name.admin_order_field = 'last_name' 

あなたがHTMLを含める必要がある場合は、を指定しますメソッド上の:

def full_name(self, obj): 
    return u'%s %s' % (obj.first_name, obj.last_name) 
full_name.allow_tags = True 

最後に、Djangoはメソッド名から自動的にラベルを作成します。この場合、「フルネーム」になります。あなたが別の何かをしたい場合は、short_descriptionを使用することができます。

def full_name(self, obj): 
    return u'%s %s' % (obj.first_name, obj.last_name) 
full_name.short_description = "User's Full Name" 
+0

説明した方法はとても良いです。あなたのきちんとした説明への誇り。それは良い解決策のように見えますが、異なる列から値がマージされた新しい単一の列が作成されます。しかし、私は自分のラベルを持つ個体であるいくつかの列のセットにラベルを貼り付けたいだけです。これは、通常のテンプレートを使用している場合は簡単に可能です。しかし、私はこのジャンゴの管理セクション自体を達成したい。 –

+0

これはadmin contribパッケージの提供された手段では不可能です。テンプレートや重大な変更を加えたソリューションを作成することもできますが、それは価値があるよりも面倒です。 –

+0

あなたの解決策は、この問題で利用できる最良の解決策です。ご回答有難うございます。私はこのソリューションを必要に応じて将来のプロジェクトに使用します。 –

0

グループ列への道は、あなたが管理者でリストビューに記載された正確な方法で、現在ありません。

Chris Prattがあなたに与えた答えは、ほぼ同じ結果を達成するためのあなたの選択肢です。

+0

私は尋ねられた方法を表示する方法があるかどうかを知りたい。私が考えることができる他の方法は、jQuery/Javascriptを使ったDOM操作です。しかし、スキーマが変更されたときは管理が難しくなります。 –

+0

あなたの答えのおかげでありがとう...あなたはそれについて正しいです。 :) –