gpt4 book ai didi

python - 创建时如何使Django模型运行某些功能

转载 作者:行者123 更新时间:2023-12-03 17:05:13 25 4
gpt4 key购买 nike

我想要的是
我有一个专栏video_length在名为 Episode 的模型中,以及另一列 sum_length在另一个型号中Series .
我要sum_length仅在剧集创建时更新,当我修改它时不要更新。
我现在怎么做?
现在,我重写了保存函数,并添加了一个函数调用来更新它,就像这样。

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)
excerpt由 Markdown 内容生成我认为当 excerpt为空白已保存,未更新。
我为什么要问这个问题?
  • 我的解决方法是可用的,但我想找到一个更 Python 的代码
  • 当我真的需要更新它时,我的解决方法不会更新。

  • 你能给我什么?
    也许示例代码很好
    其他信息
    Django :1.11.6
    python :3.6.3
    数据库:MySQL
    感谢您的回答

    最佳答案

    有两种方法可以做到这一点。

  • 就像你已经做的那样覆盖 save() 方法

    这也是检查对象是否已保存的两种方法。

    一种。检查主键(pk)。

    我们可以简单地检查主键是否为无,因为主键仅在对象保存在数据库中之后设置。
    self.pk is None  
    #not saved
    else
    #already saved instance

    如果您设置了 ,此解决方案将无法正常工作(primary_key=True) 在你的模特课上。

    湾。 Django 还提供了另一种检查方式

    来自 https://docs.djangoproject.com/en/2.0/ref/models/instances/#customizing-model-loading
    if self._state.adding == True 
    #not saved
    elif self._state.adding == False 
    #already saved instance
  • 实现 post_save 信号
    https://docs.djangoproject.com/en/1.11/ref/signals/#django.db.models.signals.post_save

    该信号提供了一个名为 的 bool 属性。已创建 .它的值为如果创建了新记录,则为 true;如果记录已创建,则为 False .
    这是最简洁的解决方案,如果您想实现太多逻辑,则必须使用

    按照这个简单的教程来实现后保存信号https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html

  • 如果逻辑很简单并且您只需要一个模型的功能,请选择第一个选项。

    根据代码的长度以及是否要将功能扩展到多个模型类,选择第二个选项。

    关于python - 创建时如何使Django模型运行某些功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995914/

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