django - 模型 unicode() 显示外键对象属性

Posted

技术标签:

【中文标题】django - 模型 unicode() 显示外键对象属性【英文标题】:django - model unicode() show foreignkey object attribute 【发布时间】:2013-02-07 13:03:18 【问题描述】:

我是 Django 新手,有一个应用程序模型和一个环境模型。环境将应用程序作为外键。我知道我需要为模型的人类可读表示编写一个 unicode() 方法,但是有没有办法从外键对象中获取一个属性以显示为字符串的一部分?

class Application(models.Model):
    app_id = models.IntegerField(primary_key=True)
    app_name = models.CharField(max_length=200)
    app_description = models.CharField(max_length=2000, blank=True)

    def __unicode__(self):
        return self.app_name

class Environment(models.Model):
    app_id = models.ForeignKey(Application, db_column='app_id')
    environ_id = models.IntegerField(max_length=6)
    environ_name = models.CharField(max_length=200)

    def __unicode__(self):
        return '%s %s' % (application__app_name, self.environ_name)

我希望将环境模型表示为“app_name environ_name”。

更新: 我想将环境模型显示为“app_name environ_name”的原因,以便用户在管理页面上输入数据时更清楚。例如,app_name 为“NavSystem”,environ_name 为“DEV1”,因此将环境模型表示为“NavSystem DEV1”比仅“DEV1”更有用。

【问题讨论】:

【参考方案1】:

您确实可以通过使用“点”语法来引用属性。 这是你想要的:

def __unicode__(self):
   return '%s %s' % (self.app_id.app_name, self.environ_name)     

【讨论】:

太棒了,这正是我所需要的。谢谢! 如果我使用“点语法”访问外键对象,我得到:“NoneType”对象没有属性“名称”。我使用 self..。属性“名称”存在。

以上是关于django - 模型 unicode() 显示外键对象属性的主要内容,如果未能解决你的问题,请参考以下文章

关于django模型里面的__str__和__unicode

Django:在父模型的详细视图模板中显示外键模型

Django 使用外键添加到数据库,同时仍显示来自其他模型的信息

Django - 显示结果信息,同时使用具有多个外键关系的模型优化数据库查询

Django 和具有多个外键的模型

在 Django 中使用自定义外键字段保存表单中的数据