gpt4 book ai didi

Django模型创建使用__init__?

转载 作者:行者123 更新时间:2023-12-04 05:19:36 26 4
gpt4 key购买 nike

假设我有一个名为Hero的类,其字段名为“name”。每次创建新的Hero对象时,我都想添加" is a hero"。我可以为此使用__init__吗?还是有我可以覆盖的特定于Django的方法?

class Hero(modes.Model)
name = models.CharField(max_length=100)
def __init__(self, *args, **kwargs):
name += " is a hero"
super(Hero, self).__init__(*args, **kwargs)

最佳答案

如果“每次创建新的Hero对象”是指“每次在数据库中创建Hero记录”,那么不,您不想在__init__方法中执行此操作,因为每次调用a Hero对象是使用Python创建的,包括从数据库中获取现有记录时。

要执行所需的操作,可以使用Django的post_save signal,在信号回调中检查created关键字参数是否为True,如果是,则执行“创建时”逻辑。

另外,在某些情况下更为直接自然,您可以按以下方式覆盖Hero的save()方法:

def save(self, *args, **kwargs):
if not self.pk: # object is being created, thus no primary key field yet
self.name += " is a hero"
super(Hero, self).save(*args, **kwargs)

请注意,Djagno的 bulk_create方法将跳过触发后保存信号或调用 save的操作。

关于Django模型创建使用__init__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com