将self.user作为foreignkey返回

时间:2017-11-15 08:14:29

标签: python django django-models

我有一个带有外键的模型。对于这个模型,我想设置' 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 ..'查看每个名册的用户名。

我希望它们始终显示为用户名。当我添加名单时,我无法弄清楚它为什么不起作用。

4 个答案:

答案 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()