Django 中的 __str__ 函数在做什么?

Tor*_*eli 20 python django django-models

我正在阅读并试图理解 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
Run Code Online (Sandbox Code Playgroud)

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

Yil*_*maz 13

您创建了博客模型。一旦你迁移了它,Django 将在你的数据库中创建一个带有“name”和“tagline”列的表。如果您想通过模型与数据库进行交互,例如创建模型的实例并保存它或从数据库中检索模型;

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

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

python manage.py shell
Run Code Online (Sandbox Code Playgroud)

然后

from projectName.models import Blog 
Blog.objects.all() //will get you all the objects in "Blog" table
Run Code Online (Sandbox Code Playgroud)

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

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

<QuerySet [<Blog:>,<Blog:>,<Blog:>....]
Run Code Online (Sandbox Code Playgroud)

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

 <QuerySet [<Blog:itsName>,<Blog:itsName>,<Blog:itsName>....]
Run Code Online (Sandbox Code Playgroud)

如果你想测试一下:

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
Run Code Online (Sandbox Code Playgroud)


Hos*_*lah 7

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

覆盖它会给出一个更人性化的对象名称,如 Author.name


mud*_*gii 7

__str__方法只是告诉 Django 在需要打印 any 模型的实例时要打印什么。这也是让您的管理面板从这里开始的原因

在此处输入图片说明

注意:对象如何简单地编号

对此

在此处输入图片说明.

注意:这里的正确对象名称

您可以根据自己的选择选择在管理面板中显示的内容。无论是字段值还是默认值或其他内容。