2013-01-02 48 views
8

我試圖在管理列表視圖中顯示外鍵「公司名稱」。但是,列表視圖僅顯示公司的(無)。我做錯了什麼?Django:列表顯示中的外鍵值admin

admin.py

class CampaignAdmin(admin.ModelAdmin): 
    #fields = ['name', 'Company_name', 'active', 'modified', 'created'] 
    list_display = ['name', 'related_company', 'active', 'modified', 'created'] 
    list_filter = ['active'] 
    search_fields = ['name'] 
    sortable_field_name = "name" 
    autocomplete_lookup_fields = { 
     'name': ['name'], 
     } 

    def related_company(self, obj): 
     return '%s'%(obj.Company.name) 
    related_company.short_description = 'Company' 


admin.site.register(Campaign, CampaignAdmin) 

model.py

class Company(models.Model): 
    companyid = models.CharField(max_length=255, primary_key=True, db_column='companyID') 
    name = models.CharField(max_length=105) 
    logourl = models.CharField(max_length=255, db_column='logoURL') 
    website = models.CharField(max_length=255, blank=True) 
    active = HibernateBooleanField(default=False) 
    created = models.DateTimeField() 
    modified = models.DateTimeField(null=True, blank=True) 

    class Meta: 
     db_table = u'company' 
     ordering = ['name'] 

    @staticmethod 
    def autocomplete_search_fields(): 
     return ("id__iexact", "name__icontains",) 

    def __unicode__(self): 
     return self.name 


class Campaign(models.Model): 
    campaignid = models.CharField(max_length=255, primary_key=True, db_column='campaignID') 
    name = models.CharField(max_length=105) 
    active = HibernateBooleanField(default=False) 
    created = models.DateTimeField() 
    modified = models.DateTimeField(null=True, blank=True) 
    companyid = models.ForeignKey(Company, null=True, db_column='companyID', blank=True) 

    class Meta: 
     db_table = u'campaign' 


    def __unicode__(self): 
     return self.name 

回答

22

Campaign模型沒有Company屬性 - 在ForeignKey的是場companyid。你需要你的函數改爲

def related_company(self, obj): 
    return obj.companyid.name 
related_company.short_description = 'Company' 

而且,由於該公司目標的__unicode__()方法反正返回的名字,你可能不需要自定義函數反正 - 我想你可以把外鍵字段直接在顯示列表中:

list_display = ['name', 'companyid', 'active', 'modified', 'created'] 
+0

此外,字符串插值是毫無意義的:應該是'return obj.companyid.name'。 –

+0

@DanielRoseman - 呃,我忽略了這一點。謝謝,修復。 – Blair

相關問題