在我的应用程序中,每个对象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
我做错了什么?读了这篇文章之后,我怀疑在完成特定模型的定义之前,我不能引用模型中字段的名称。然而,1)我不确定,并将感激一个决定性的"是"或"否",2)如果是这样的话,我怎么能引用"特定用户的名字,这是我现在定义的模型中不同字段的值"?
"过程"是指方法。如果您希望您的Kurs模型能够显示完整的用户名,请编写一个方法来实现它。
class Kurs(models.Model):
...
def full_user_name(self):
return u'{} {}'.format(self.prowadzacy.first_name, self.prowadzacy.last_name)