【问题标题】:return self.user as foreignkey将 self.user 作为外键返回
【发布时间】:2017-11-15 08:14:29
【问题描述】:

我有一个带有外键的模型。对于这个模型,我想将'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__ returned non-string (type User)

我可以删除“def str...”并毫无问题地创建名册。但是每个名册在管理页面中都显示为对象。所以我可以加回'def str..'来查看每个名册的用户名。

我希望它们始终显示为用户名。而且我不知道为什么在我添加花名册时它不起作用。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    您需要参考“用户”中要显示的特定字段。 试试:

    def __str__(self):
        return self.user.username
    

    【讨论】:

    • .username 可以替换为用户模型具有的任何属性。即电子邮件、名字、姓氏等
    【解决方案2】:

    如您的错误所示:

    TypeError __str__ returned non-string (type User)
    

    __str__ 方法应该返回一个str,在这里,您返回一个对象 (User)。

    您应该返回return self.user.__str__(用户的str 表示)。

    【讨论】:

      【解决方案3】:

      你只能从__str__返回字符串,而不是作为对象的用户。

      def __str__(self):
          return self.user.username
      

      【讨论】:

        【解决方案4】:

        您需要显示您希望显示的用户的属性

        def __str__(self):
           return self.user
        

        应该返回以下任何一个(或类似的)

        return str(self.user)
        return self.user.get_username()
        return self.user.get_full_name()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多