2010-08-14 57 views
3

我有一个带有文本字段的Django模型。我在管理网站上使用了富文本编辑器(nicEdit),以允许客户轻松地将标记输入到该字段中。我想处理该字段的内容并在将任何内容插入数据库之前执行一些操作。Django admin - 数据库插入/更新前的过程字段

例如,我想剥离由MS Word生成的垃圾,字体标签等。我希望这部分应该很容易,但我不确定要重写或挂钩以使其工作。

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

有什么建议吗?

回答

3

剥离垃圾等应该用自定义的formfield来完成。

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

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

我应该提到,我还没有搞砸表格,更不用说创建自定义表单字段。如果你可以发表一个简短的例子,我会永远感激。另外,如何下载图像? – 2010-08-15 02:31:52

+0

@no:在这种情况下,为什么你不尝试这样的事情:http://code.google.com/p/django-richtext/ – Wolph 2010-08-15 12:23:23

+0

谢谢,我会看看源代码。从那里链接的django-photologue项目看起来也不错。这仍然不能解决图像下载问题,但它看起来像urllib可以覆盖。 – 2010-08-15 20:47:34

9

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

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

没有什么会被保存,直到超(MODELNAME,个体经营).save()被执行。

如果您想要提高某种类型的错误而不是仅仅处理它的可能性,您可能会想要使用clean()方法与raise ValidationError()

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

+0

这听起来就像我在找的东西。我稍后再尝试并报告。 – 2010-08-15 02:35:10

+0

它可以工作,但它不可重用,除非我可以用抽象基类替换'YourModelName'来获得正确的类。 – 2010-08-17 01:53:08

+0

@no:您可以轻松地将其重复使用,方法是使用'signal'将其添加到单独的方法中,而不是覆盖'save'代码。 – Wolph 2010-08-17 02:45:51

相关问题