【问题标题】:What happens when an object is created in Django admin?在 Django admin 中创建对象时会发生什么?
【发布时间】: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


【解决方案1】:
  1. 创建模型实例时,使用 init 函数。
  2. 如果要将数据保存到数据库中,请使用 save
    功能。
  3. 管理站点正在调用“str”函数。

【讨论】:

  • 感谢您的回答。所以这意味着当我在 django admin 中创建一个对象时,首先它调用 init 函数然后保存函数对吗??
  • 我找不到实际的源代码,但我很确定答案是肯定的。
猜你喜欢
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2019-10-02
  • 1970-01-01
相关资源
最近更新 更多