2013-01-02 11 views
8

Ich versuche, den Fremdschlüssel 'Firmenname' in der Admin-Listenansicht anzuzeigen. In der Listenansicht wird jedoch (None) nur für das Unternehmen angezeigt. Was mache ich falsch?Django: Fremdschlüsselwert in einer Listenanzeige 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 

Antwort

22

Ihr Campaign Modell hat keine Company Attribut - das ForeignKey ist das Feld companyid. Sie müssen Ihre Funktion

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

Und da die __unicode__() Methode des Unternehmen Objekts gibt den Namen sowieso ändern, haben Sie wahrscheinlich die benutzerdefinierte Funktion ohnehin nicht brauchen - ich glaube, Sie das Fremdschlüsselfeld setzen können direkt in der Display-Liste:

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

Auch die String-Interpolation ist sinnlos: sollte nur 'return obj.companyid.name' sein. –

+0

@DanielRoseman - heh, das habe ich übersehen. Danke, behoben. – Blair