Django TypeError __str__ 返回非字符串(类型元组)

1 python django django-models

我需要帮助。我是菜鸟:)。我需要在 Django 中创建模型来保存用户名和密码。用户名就OK了。但密码有问题。 str返回非字符串(元组类型)

from django.db import models

# Create your models here.

class User(models.Model):
    user_name = models.CharField(max_length=25, null=False, blank=False, default='User')
    user_password = models.CharField(max_length=10, null=False, blank=False, default='1234')

    def __str__(self):
        return self.user_name, self.user_password
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

正如错误已经说明的那样, a__str__需要返回一个字符串,而不是一个元组。例如,您可以返回:

class User(models.Model):
    user_name = models.CharField(max_length=25, null=False, blank=False, default='User')
    user_password = models.CharField(max_length=10, null=False, blank=False, default='1234')

    def __str__(self):
        # danger: might expose the password
        return '{}/{}'.format(self.user_name, self.user_password)
Run Code Online (Sandbox Code Playgroud)

但话虽这么说,将密码添加到对象中是非常__str__奇怪的,因为这意味着如果您渲染User,就会暴露密码。因此,返回以下内容可能是一个更好的主意user_name

class User(models.Model):
    user_name = models.CharField(max_length=25, null=False, blank=False, default='User')
    user_password = models.CharField(max_length=10, null=False, blank=False, default='1234')

    def __str__(self):
        return self.user_name
Run Code Online (Sandbox Code Playgroud)

以原始格式保存密码也很奇怪。通常密码是经过哈希处理的

如果你想改变用户模型,你应该继承AbstractUser[Django-doc]。有关更多信息,请参阅有关替换自定义用户模型的Django 文档