2009-09-09 7 views
8

これは簡単な質問かもしれませんが、私はそれを把握していないようです。Django:管理インターフェースの多くの項目から多数の項目のリストを表示

私はmodels.py:ServiceとHostの2つのシンプルなモデルを持っています。 Host.servicesはServiceとm2m関係にあります。 つまり、ホストには複数のサービスがあり、1つのサービスは複数のホスト上に存在することができます。基本的なm2m。

models.py

class Service(models.Model): 
    servicename = models.CharField(max_length=50) 

    def __unicode__(self): 
      return self.servicename 

    class Admin: 
      pass 

class Host(models.Model): 
    #... 
    hostname = models.CharField(max_length=200) 
    services = models.ManyToManyField(Service) 
    #... 

    def get_services(self): 
      return self.services.all() 

    def __unicode__(self): 
      return self.hostname 

    class Admin: 
      pass 

admin.py今、私はすべてのホストの列は、 'サービス' 列にリストされているページを開くと

from cmdb.hosts.models import Host 
from django.contrib import admin 


class HostAdmin(admin.ModelAdmin): 

    list_display = ('get_services',) 

admin.site.register(Host, HostAdmin) 

のような出力が表示されます

サービスを受ける

[<Service: the_service-1>, <Service: the_service-2>]

の代わりに:

サービス

the_service-1

the_service-2 など

私が間違って何をしているのですか? 私の質問をお読みいただきありがとうございます。

+0

私は自分の答えを更新しました。 –

答えて

19

次のようなものにget_servicesを変更する必要があります。

def get_services(self): 
    return "\n".join([s.servicename for s in self.services.all()]) 

更新: get_servicesの出力がエスケープされているように、というよりも、<br/>セパレータとして\nを使用してみてください。

+1

+1。モデルメソッドでHTML書式をハードコードするよりも、これを行うより良い方法があることを願っています。 –

+1

それは単なる1つの方法です。もう1つは、テンプレートを文字列にレンダリングして結果を返すことです。これはHTMLをテンプレートに移動します。しかし、これはDjango管理者のためのものです。これはエンドユーザではなくシステム管理者のためのものです。したがって、実用的なアプローチはOKかもしれません。 –

+1

ありがとうございました、その答えがトリックでした。 –

関連する問題