【发布时间】:2021-08-17 11:47:00
【问题描述】:
我是 Django 新手。当我们学习 Python 时,有人告诉我们,当创建一个对象时,init 函数会被初始化,并且所有传递的变量都使用 self 关键字保存。例如:
class Movie:
def __init__(self,name,caption,budget):
self.name = name
self.caption = caption
self.budget = budget
obj1 = Movie('Taken',"Fight movie",250)
obj2 = Movie('Wanted','Comedy movie',300)
print(obj1.name)
print(obj2.name)
这里,在上面的例子中,当我点击运行时,初始化并保存了两个对象。因此,当我打印两个电影名称时。
现在当我在 Django 中阅读文档时,它说当我们在 Django admin 中创建模型的对象时,它会调用 save 函数来保存实例。到目前为止,我一直认为 dunder init 将像在普通 Python 中一样被调用。
Django 模型如下所示:
class Employee(models.Model):
name=models.Charfield()
dept=models.Charfield()
def __str__(self):
return self.name
另外,在这里我没有看到任何显式定义的 init 函数。但是当我 ctrl + 单击模型时,我可以看到定义了许多函数,并且定义了 init 和 save 函数。现在我想知道当我们从 django admin 保存任何对象时调用哪个函数。另外,如果我们从 post api 调用而不是 django admin 创建一个对象,会调用相同的函数吗??
我也看不到任何地方调用 str 函数,但它在 django-admin 中工作,该名称用于表示 Employee 对象。希望我已经解释得很好。
【问题讨论】:
-
你熟悉OOP的继承概念吗?
-
这是很多问题,但要回答其中一个this 是管理员调用的保存(Model.save)
-
@jfaccioni 是的,我很熟悉,但我不知道调用哪个函数..从 django-admin 保存时是初始化还是保存?
-
为什么要关心调用的是哪个函数?你想在保存实例时触发一些东西吗?
-
因为我在一次采访中被问及我无法回答@ÇağatayBarın
标签: python django api django-models django-admin