【问题标题】:def __str__(self) issue - Djangodef __str__(self) 问题 - Django
【发布时间】:2020-09-21 11:53:26
【问题描述】:

我正在尝试在 django 中打印我的数据库中的第一个对象的标题。但是,当我输入命令时

Project.objects.all() 在 shell 中,它只返回以下内容:

<QuerySet [<Project: Project object (1)>]>

这是我的代码:


# Create your models here.

class Project(models.Model):
    
    title = models.CharField(max_length=100)
    progress = models.FloatField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.title

class Task(models.Model):
    
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    priority = models.SmallIntegerField(default=0)
    open_date = models.DateTimeField()
    close_date = models.DateTimeField()
    status = models.SmallIntegerField(default=0)
    
    def __str__(self):
        return self.title

str 部分似乎没有做任何事情,即使我故意拼错某些内容,也不会返回任何错误。似乎有一些线程存在类似问题,但目前还没有公认的解决方案。

我希望它返回我输入的标题,它应该是 ]>。

提前感谢您的帮助。

【问题讨论】:

  • 从 QuerySet 中提取项目实例时看起来是否正确?
  • 是的。我创建了另一个在查询集中更新的对象。我检查了我的 models.py 文件是否有任何错误,这就是我发现的:stackoverflow.com/questions/64120707/…

标签: python python-3.x django string django-models


【解决方案1】:

您将 self.title 传递给 str 方法。只需传递 self 然后返回标题。

def __str__(self):
    return self.title

【讨论】:

  • 谢谢。我刚刚更改了它,但它仍然返回相同的问题
【解决方案2】:

通常,在打印容器时使用底层对象的repr(例如,所有内置集合类型都这样做)。将方法的名称从__str__ 更改为__repr__,它应该可以解决您的问题。如果没有定义其他 __str____str__ 已经默认使用 __repr__ 方法,因此它仍然可以在其他字符串化场景中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 2021-07-22
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2014-06-11
    相关资源
    最近更新 更多