2017-02-23 8 views
0

Admin list_displayにForeignKey値を表示しようとしています。私はすべてのソリューションを使用しているような解決策を試していますが、ただエラーが表示されます'NoneType' object has no attribute 'first_name'Django ForeignKeyはフィルタではあるがリスト表示では表示されない

これを正しくリストしましたか?ありがとうございました。

プラークモデル

class Plaque(models.Model): 
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='plaques', default=1) 
    group = models.ForeignKey(Group, blank=True, null=True, verbose_name='Group Name') 
    veteran = models.ForeignKey(Veteran, blank=True, null=True) 
    ... 

モデル管理

class PlaqueAdmin(admin.ModelAdmin): 
    list_display = ['id', 'get_veteran', 'last_name', 'first_name', 'branch', 'group', 'draft'] 

    def get_veteran(self, obj): 
     return obj.veteran.first_name 

    get_veteran.short_description = 'Veteran' 
    ... 

答えて

1

は問題が全くIDではありませんが、それはget_veteran()ています。プラークの1つにベテランがいないので、エラーが発生します。何のベテランが存在しない場合は、ブランク値(または何か他のもの)を返す必要があります:

def get_veteran(self, obj): 
    if obj.veteran is not None:   
     return obj.veteran.first_name 
    else: 
     return '' 

も注意してくださいあなたはlist_displayで関係を通過できるように - 私はそれは同じことを提起しないことが100%かどうか分かりませんベテランがnullの場合はエラーです。ドキュメントと自分のコードを見て、あなたのものと似たものを探してください。

class PlaqueAdmin(admin.ModelAdmin): 
    list_display = ['id', 'veteran__first_name', 'last_name', 'first_name', 'branch', 'group', 'draft'] 
+0

ありがとうございました。 –

関連する問題