Reputation: 33585
I'm trying to display the foreign key 'company name' in the admin list view. However, the list view just shows (None) for the company. What I'm I doing wrong?
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
Upvotes: 12
Views: 25052
Reputation: 934
An additional feature to consider when you're linking to a ForeignKey object in this way is to set related_company.allow_tags = True
on the function.
This will make it so you can return HTML and have it be rendered as a usable link in the listview.
Upvotes: 0
Reputation: 15788
Your Campaign
model has no Company
attribute - the ForeignKey is the field companyid
. You'd need to change your function to
def related_company(self, obj):
return obj.companyid.name
related_company.short_description = 'Company'
And since the __unicode__()
method of the company object returns the name anyway, you probably don't need the custom function anyway - I think you can put the foreign key field directly in the display list:
list_display = ['name', 'companyid', 'active', 'modified', 'created']
Upvotes: 26