Django admin - 数据库插入/更新之前的进程字段

时间:2010-08-14 22:28:12

标签: python django django-admin

我有一个带文本字段的django模型。我在管理站点上使用富文本编辑器(nicEdit),以允许客户端轻松地在该字段中输入标记。我希望处理该字段的内容,并在将任何内容插入数据库之前执行一些操作。

例如,我想剥离由MS Word,字体标签等生成的垃圾。我希望这部分应该很简单,但我不知道要覆盖或挂钩以使其工作。

我还想检测远程链接的图像,将本地副本下载到MEDIA_ROOT,然后将img src重新链接到本地​​图像。我不太确定如何获取远程图像;我认为django.Storage可能有所帮助,但看起来它无法从远程网址获取内容。

有什么建议吗?

2 个答案:

答案 0 :(得分:9)

要在保存之前操作模型中的数据,请使用save()方法,如:

    def save(self):
      self.NameOfTextField = myCustomCleanFunction(self.NameOfTextField)
      super(YourModelName, self).save()

在执行super(modelname,self).save()之前,不会保存任何内容。

如果你想提出某种类型的错误而不是只是静默处理它,你可能想要使用带有 raise ValidationError()的clean()方法。

下载远程内容对我来说是一个新内容,所以我无法帮助你。您可能需要查看Django并找到Python函数来完成这项工作。

答案 1 :(得分:3)

剥离垃圾等应该使用自定义表单域完成。

下载图片......有多种方法可以解决这个问题。

  • 如果您选择将图像位置和原始位置存储在数据库中,则应使用预保存信号进行存储。
  • 如果您选择直接在本地存储图像,那么您也可以将图像作为表单区域的一部分。只需下载所有远程图像,并用本地URL替换网址。