【问题标题】:(Django 1.10) referring to properties of an object referred to by ForeignKey(Django 1.10) 引用 ForeignKey 引用的对象的属性
【发布时间】:2017-03-29 05:44:13
【问题描述】:

在我的应用程序中,每个对象 Kurs 都需要有一个“prowadzacy”字段来指定给定 Kurs 所属的用户。因此,我的 models.py 有以下内容:

class Kurs(models.Model):
    prowadzacy = models.ForeignKey(User)

我还需要知道拥有给定 Kurs 的用户的名字。在 shell 中,以下工作:

>>> k=Kurs.objects.get(id=1)
>>> k
<Kurs: Wprowadzenie do epi 2>
>>> k.prowadzacy
<User: leszekwronski>
>>> k.prowadzacy.first_name
u'Leszek'

最终,我需要在我的 Kurs 对象中有一个字段,其中包含转换拥有者的名字和姓氏的过程的结果。 作为第一步,我想添加一个仅包含名字的字段。但是,当我修改我的 models.py 以包含以下内容时:

class Kurs(models.Model):
    prowadzacy = models.ForeignKey(User)
    imie = prowadzacy.first_name

然后我收到以下错误:

AttributeError: 'ForeignKey' object has no attribute 'first_name'

我尝试使用“self.prowadzacy.first_name”而不是“prowadzacy.first_name”,但无济于事:

NameError: name 'self' is not defined

我做错了什么?在阅读this 之后,我怀疑在完成特定模型的定义之前,我无法引用模型中的字段名称。但是,1)我不确定,我会很感激一个决定性的“是”或“否”和 2)如果是这种情况,我如何引用“特定用户的名字,它是 a 的值我现在定义的模型中的不同字段”?

【问题讨论】:

  • “最终我需要在我的 Kurs 对象中有一个字段,其中包含转换拥有者姓名的过程的结果”不,你想要的是一个函数。

标签: python django django-1.10


【解决方案1】:

“过程”是指方法。如果您希望您的 Kurs 模型能够显示完整的用户名,请编写一个方法来实现。

class Kurs(models.Model):
     ...
     def full_user_name(self):
          return u'{} {}'.format(self.prowadzacy.first_name, self.prowadzacy.last_name)

【讨论】:

  • 非常感谢。 [我会在几分钟内接受答案。]
猜你喜欢
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多