我有一个带有外键的模型。对于这个模型,我想设置' def str '作为用户。
我已经完成了这个
from django.contrib.auth import get_user_model
User = get_user_model()
class Rosters(models.Model):
place = models.ForeignKey('Places')
position = models.ForeignKey('Positions', blank=True, null=True)
user = models.ForeignKey(User, related_name='roster')
validfrom = models.DateTimeField(blank=True, null=True)
validto = models.DateTimeField(blank=True, null=True)
def __str__(self):
return self.user
这将获取用户名并在管理页面中显示。但是,当我尝试创建一个新的名册。我得到一个TypeError __ str__返回非字符串(类型为User)
我可以删除' def str ...'并创建一个没有问题的名册。但每个名册在管理页面中显示为对象。所以我可以添加' def str ..'查看每个名册的用户名。
我希望它们始终显示为用户名。当我添加名单时,我无法弄清楚它为什么不起作用。
答案 0 :(得分:5)
您需要参考要显示的“用户”中的特定字段。 尝试:
MultiBindingConverter
答案 1 :(得分:3)
如您的错误所示:
TypeError __str__ returned non-string (type User)
__str__
方法应返回str
,此处您将返回一个对象(User
)。
您应该返回return self.user.__str__
(用户的str
表示)。
答案 2 :(得分:2)
你只能从__str__
而不是用户的对象返回字符串。
def __str__(self):
return self.user.username
答案 3 :(得分:2)
您需要显示您希望显示的用户的属性
def __str__(self):
return self.user
应该返回以下任何一种(或类似的)
return str(self.user)
return self.user.get_username()
return self.user.get_full_name()