Django的str函数在做什么?

2024-05-12 20:45:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读并试图理解django文档,所以我有一个合乎逻辑的问题。

有我的models.py文件

from django.db import models

# Create your models here.


class Blog(models.Model):
    name = models.CharField(max_length=255)
    tagline = models.TextField()

    def __str__(self):
        return self.name



class Author(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField()

    def __str__(self):
        return self.name



class Post(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    n_comments = models.IntegerField()
    n_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):
        return self.headline

在这里,每个类中的每个__str__函数都在做什么? 我需要这些功能的原因是什么?


Tags: djangonameselfmodelreturnmodelsdefblog
2条回答

这会覆盖这个类的对象的默认名称,类似于Auther:object,这不是很有帮助。

重写它会给对象提供一个更人性化的名称,如Auther.name

你创建了博客模型。迁移之后,Django将在数据库中创建一个包含“name”和“tagline”列的表。 如果您想与数据库和模型交互,例如创建模型的实例并保存它或从数据库检索模型

def __str__(self):
        return self.name 

会派上用场的。通过以下方式打开项目根文件夹中的python交互式shell:

python manage.py shell

那么

from projectName.models import Blog 
Blog.objects.all() //will get you all the objects in "Blog" table

此外,当您查看管理面板中的模型时,您将看到列出了具有name属性的对象。

问题是,如果没有添加该函数,return将如下所示:

<QuerySet [<Blog:>,<Blog:>,<Blog:>....]

所以你不会知道那些东西是什么。更好的识别这些对象的方法是通过将其设置为名称的属性之一检索它们。这样您将得到如下结果:

 <QuerySet [<Blog:itsName>,<Blog:itsName>,<Blog:itsName>....]

如果你想测试一下:

python manage.py shell
from projectName.models import Blog
Blog.objects.create(name="first",tagline="anything") //will create and save an instance. It is single step. Copy-paste multiple times.
Blog.objects.all() //check out the result

相关问题 更多 >