2011-02-01 12 views
5

ここmodels.py表示親フィールド(list_display)

class Applicant(models.Model): 
    name = models.CharField(...) 
    email = models.CharField(...) 

class Application(models.Model): 
    applicant = models.ForeignKey(Applicant) 
    text = models.TextField(...) 

の抜粋である私のadmin.pyです:

私が提示したいApplicationAdminで
class ApplicationAdmin(model.ModelAdmin): 
    list_display = ['text', *******] 

admin.site.register(Application, ApplicationAdmin) 

申請者の名前と電子メール。

SOに尋ねる前に何を試しましたか?私はがない動作し、次のコードを、見てきました

list_display = ['text', 'applicant__name','applicant__email'] 

を私はModelAdmin.inlines見てきましたが、1つを見ることができるように、親/子関係が逆転する必要があります。

提案がありますか?アプリケーション管理者に申請者の名前/電子メールを表示するにはどうすればよいですか? Prefferably新しい分野など

+0

可能な重複ちょうどそうのようなあなたのアプリケーションモデルにメソッドを追加ForeignKeyフィールドの?](http://stackoverflow.com/questions/163823/can-list-display-in-a-django-modeladmin-display-attributes-of-foreignkey-field) –

答えて

10

あなたはlist_display docs第四可能性のようにそれを行うことができます。

class Application(models.Model): 
    applicant = models.ForeignKey(Applicant) 
    text = models.TextField(...) 

    def applicant_name(self): 
     return self.applicant.name 
    applicant_name.short_description = 'Applicant Name' 

    def applicant_email(self): 
     return self.applicant.email 
    applicant_email.short_description = 'Applicant Email' 

そして、あなたがそうのようなセットアップあなたのModelAdminのを行うことができます:DjangoのModelAdminの表示属性で[缶「リストの\ _Display」の

class ApplicationAdmin(model.ModelAdmin): 
    list_display = ['text', 'applicant_name', 'applicant_email'] 
+0

これも機能することが確認できます。お返事をありがとうございます! – hermansc

+0

ええと...私がこれを投稿している間に、受け入れられた解決策が編集されました。あなたのモデルで幸運を! – meshantz

+0

これはおそらくより良い方法です –

0

でデータベースを移行することなく、あなただけのリストにそれを表示する必要がある場合:

class Applicant(models.Model): 
    name = models.CharField(...) 
    email = models.CharField(...) 

    def __unicode__(self): 
     return "%s <%s>" % (self.name, self.email) 

class ApplicationAdmin(model.ModelAdmin): 
    list_display = ['text', 'applicant'] 

回答コメント

にはなく、それぞれがしたいですフィールドは管理者の新しい行/行として使用され、文字列としては使用されません。

ない、それが最善の解決策空くですが、それがうまくいくかどうかわから:

class Application(models.Model): 

    @property 
    def applicant__name(self): 
     return self.applicant.name 

    # or maybe: 

    def __getattr__(self, name): 
     if name.startswith('applicant__'): 
      return gettattr(self.applicant, 
          name[len('applicant__'):]) 
     raise AttributeError() 

class ApplicationAdmin(model.ModelAdmin): 
    list_display = ['text', 'applicant__name'] 
+0

別の解決策ではありませんが、各フィールドを文字列ではなく管理者の新しい行/行として使用したいと考えています。あなたの答えをありがとう、深くお詫び申し上げます。 – hermansc

+0

"多分"解決策を試していませんでした。しかし、もう一つは "財産"がなくても魅力のように働く。 – hermansc

関連する問題