📜  使用 __str__函数更改对象显示名称 – Django 模型 | Python(1)

📅  最后修改于: 2023-12-03 14:49:36.985000             🧑  作者: Mango

使用 __str__函数更改对象显示名称 – Django 模型 | Python

在 Django 中,模型类是用于定义数据库中数据结构与数据操作的一个重要组件。在使用模型类时,往往需要在对象实例化后访问该对象的各个属性,以获取或修改相关的数据信息。但是,如果直接打印一个对象,则默认输出的是该对象在内存中的引用地址,这样往往不能准确地反映该对象所代表的意义。因此,我们需要通过 __str__ 函数来定义对象的显示名称。本文将介绍如何在 Django 模型类中使用 __str__ 函数来更改对象的显示名称。

什么是 __str__ 函数?

__str__ 函数是 Python 中的一种特殊方法,用于定义一个对象的字符串表示。它在类被实例化后自动调用,返回一个字符串类型的值。当我们尝试将一个对象打印输出到控制台或其他地方时,会默认调用该函数来生成该对象的字符串表示。因此,定义一个好的 __str__ 函数可以让我们更方便地查看和调试对象。

例如,下面是一个简单的 Python 类:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person('Tom', 18)
print(person) # <__main__.Person object at 0x7f461c59f220>

可以看到,如果我们直接打印一个 Person 类对象,输出的只是该对象在内存中的引用地址,并不能准确地反映该对象所代表的意义。因此,我们需要通过 __str__ 函数来定义一个更好的字符串表示:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return 'Person(name={}, age={})'.format(self.name, self.age)

person = Person('Tom', 18)
print(person) # Person(name=Tom, age=18)

可以看到,现在我们通过重载了 __str__ 函数,输出的字符串更加准确地反映了 person 对象所代表的含义。

在 Django 模型中使用 __str__ 函数

类似于普通的 Python 类,我们也可以在 Django 模型类中使用 __str__ 函数来自定义对象的显示名称。例如,假设我们有一个 Django 模型类 Book,它表示一本书:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=8, decimal_places=2)

如果我们直接打印一个 Book 对象,输出的只是该对象在内存中的引用地址,这样对于我们来说并没有太多的用处。因此,我们需要通过定义 __str__ 函数来改变输出结果:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    
    def __str__(self):
        return 'Book(title={}, author={}, price={})'.format(self.title, self.author, self.price)

现在,当我们打印一个 Book 对象时,输出结果会是这样的:

book = Book(title='Python Django Manual', author='John Smith', price=10.99)
print(book) # Book(title=Python Django Manual, author=John Smith, price=10.99)

可以看到,重载了 __str__ 函数后输出的字符串更加直观地反映了 book 对象所代表的数据信息。

总结

使用 __str__ 函数可以更改 Django 模型的对象显示名称,使得打印输出更加直观,便于查看和调试程序。在 Django 模型类中,只需要简单定义一个 __str__ 函数即可完成这个过程。