2013-01-02 10 views
8

Próbuję wyświetlić klucz obcy "nazwa firmy" w widoku listy administratorów. Jednak widok listy po prostu pokazuje (Brak) dla firmy. Co robię źle?Django: wartość klucza obcego na liście wyświetlania 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 

Odpowiedz

22

Twój model Campaign ma Company atrybut - ForeignKey jest pole companyid. trzeba by zmienić funkcję

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

A ponieważ metoda obiektu firmy __unicode__() zwraca nazwę tak, to prawdopodobnie nie potrzebują funkcji niestandardowej i tak - myślę, że można umieścić w polu klucza obcego bezpośrednio na liście wyświetlania:

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

Również interpolacja ciągów znaków jest bezcelowa: powinien być po prostu "return obj.companyid.name". –

+0

@ Danielochoseman - heh, przeoczyłem to. Dzięki, naprawione. – Blair

Powiązane problemy