我有一个专栏“长度”在模型集,和另一个专栏“和长度”在系列。在
我希望sum_长度只在剧集创建时更新,而不在我修改时更新。在
现在,我重写save函数,并添加一个函数调用来更新它,就像这样。在
def save(self, *args, **kwargs):
if not self.excerpt:
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
])
self.excerpt = strip_tags(md.convert(self.description))[:54]
self.series.addlength(self.video_length)
super(Episode, self).save(*args, **kwargs)
由于我的摘录是由降价内容生成的,所以我认为当摘录为空时,是保存而不是更新
也许一个示例代码就可以了
丹戈:1.11.6 Python:3.6.3 数据库:MySQL
感谢您的回答
有两种方法可以做到这一点。在
像以前一样重写save()方法
还有两种检查对象是否已保存的方法。在
a.检查主键(pk)。在
我们可以简单地检查primary是否为None,因为只有在对象保存到数据库之后才设置主键。在
如果在模型类中设置了(主键=True),则此解决方案将无法正常工作。在
Django还提供了另一种检查方法
来自https://docs.djangoproject.com/en/2.0/ref/models/instances/#customizing-model-loading
执行后存储信号 https://docs.djangoproject.com/en/1.11/ref/signals/#django.db.models.signals.post_save
该信号提供一个布尔属性,其名称已创建。如果创建了新记录,则其值将true;如果该记录已创建,则其值将为False。 这是最干净的解决方案,如果您想实现太多的逻辑,必须使用它
按照这个简单的教程来实现保存后信号https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html
如果逻辑简单,并且您只想为一个模型提供功能,请选择第一个选项。在
选择第二个选项,这取决于代码的长度,如果要扩展多个模型类的功能。在
您可以将此功能移到模型表单中,而不是重写模型的保存。它会给你更多的灵活性。在
在这种情况下,您可以创建两个不同的表单,比如一个为普通用户创建,其中的摘录将在创建时更新,管理表单将在必要时重写摘录。在
相关问题 更多 >
编程相关推荐