Joe*_*oey 8 django django-models
假设我有一个名为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)
Run Code Online (Sandbox Code Playgroud)
Gho*_*r21 18
如果通过"每次创建一个新的Hero对象",你的意思是"每次在数据库中创建一个Hero记录",那么不,你不想在__init__方法中这样做,因为这在任何时候被称为英雄object是在Python中创建的,包括从数据库中获取现有记录时.
要做你想做的事,你可以使用Django的post_save信号,检查created关键字参数为True 的信号回调,如果是,则执行"on creation"逻辑.
或者,在某些情况下更直接和自然,您可以覆盖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)
Run Code Online (Sandbox Code Playgroud)
请注意,Djagno的bulk_create方法将跳过触发保存后信号或调用save.
| 归档时间: |
|
| 查看次数: |
8198 次 |
| 最近记录: |