(Django 1.10) 引用 ForeignKey 引用的对象的属性
(Django 1.10) referring to properties of an object referred to by ForeignKey
在我的应用程序中,每个对象 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) 我不确定,如果有决定性的 'yes' 或 'no',我将不胜感激;2) 如果是这样,我该如何参考 "the first name of the particular user which is the value of a different field in the model I am defining now"?
一个"procedure"表示一个方法。如果你想让你的Kurs模型能够显示完整的用户名,写一个方法来实现。
class Kurs(models.Model):
...
def full_user_name(self):
return u'{} {}'.format(self.prowadzacy.first_name, self.prowadzacy.last_name)
在我的应用程序中,每个对象 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) 我不确定,如果有决定性的 'yes' 或 'no',我将不胜感激;2) 如果是这样,我该如何参考 "the first name of the particular user which is the value of a different field in the model I am defining now"?
一个"procedure"表示一个方法。如果你想让你的Kurs模型能够显示完整的用户名,写一个方法来实现。
class Kurs(models.Model):
...
def full_user_name(self):
return u'{} {}'.format(self.prowadzacy.first_name, self.prowadzacy.last_name)