2017-02-23 76 views
0

我想列出管理員list_display一個ForeignKey值。我想下面這似乎是解決每個人都使用的解決方案,但我只是得到一個錯誤'NoneType' object has no attribute 'first_name'的Django ForeignKey的Works的過濾器,但沒有列表顯示

我有正確列呢?謝謝。

斑塊型

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()。你的一個牌匾沒有老將,因此引發了一個錯誤。您應該返回空值(或別的東西),如果沒有老將:

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

還要注意的是,你可以在list_display遍歷關係 - 我不是100%肯定但它不會提出同樣的如果退伍軍人是空的錯誤 - 雖然通過文檔和我自己的代碼尋找類似於你的東西。

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

的工作,謝謝。 –