Django admin - 从forgeign键返回文本作为显示名称

时间:2016-05-18 16:06:50

标签: django

我希望在管理面板中将我的下拉列表的显示名称作为父模型的位置标题。默认情况下,列表显示列表中所有项目的“SNMPData Object”。

但是我想显示网站名称,我认为这就像添加self.location一样简单,但是这会引发错误

错误:

coercing to Unicode: need string or buffer, MajorSiteInfoData found

代码:

class MajorSiteInfoData(models.Model):
    Location = models.CharField(max_length=200)

    class Meta:
            verbose_name = "Major Site Locations"
            verbose_name_plural = "Major Site Locations"      

    def __unicode__(self):
        return self.Location

class SNMPData(models.Model):   
    Location = models.ForeignKey(MajorSiteInfoData)
    SNMP_AUTH = models.CharField(max_length=200)
    SNMP_PRIV = models.CharField(max_length=200)   

    class Meta:
            verbose_name = "SNMP Data"
            verbose_name_plural = "SNMP Data"  

    def __unicode__(self):
        return self.Location   

1 个答案:

答案 0 :(得分:3)

__unicode__函数需要返回一个你想要显示的字符串。您的功能应如下所示:

def __unicode__(self):
    return self.Location.Location

要改进的一件事是,不应该为不同的模型使用相同的字段名称,您可能会很快混淆自己,因为有时您需要Location,有时您需要Location.Location,如上所述。将外键重命名为major_site_info之类的其他内容。同样使用带有下划线的小写字母用于字段名称,Camel用例用于python中的类名。