首页 > 解决方案 > def __str__(self) 问题 - Django

问题描述

我正在尝试在 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 [<Project: My First Project>]>。

在此先感谢您的帮助。

标签: pythonpython-3.xdjangostringdjango-models

解决方案


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


推荐阅读