【问题标题】:Django: foreign key value in a list display adminDjango:列表中的外键值显示管理员
【发布时间】:2013-01-02 22:22:06
【问题描述】:

我正在尝试在管理员列表视图中显示外键“公司名称”。但是,列表视图仅显示公司的 (None)。我做错了什么?

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

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您的 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']
    

    【讨论】:

    • 字符串插值也是没有意义的:应该只是return obj.companyid.name。
    【解决方案2】:

    以这种方式链接到 ForeignKey 对象时要考虑的附加功能是在函数上设置 related_company.allow_tags = True。

    这将使您可以返回 HTML 并将其呈现为列表视图中的可用链接。

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多