我需要在数据从数据库放入模型之前拦截数据,反之亦然

时间:2012-05-01 22:13:30

标签: django django-models django-admin

存储在数据库中的数据是HTML。我不能改变这个事实,但我想在我的django管理站点中隐藏它。

在数据库填充模型之前,我想捕获它并将html实体转换为unicode。当模型保存到数据库时,我想颠倒过程。

我可以实现从HTML实体到unicode的实际转换,反之亦然,但我不知道Django是否足以完成此任务。

我已经查看了管理员的模型表格,但是当数据显示在list_display或网站上的其他位置时,这将不起作用。

在哪里/如何最好地融入这个?

1 个答案:

答案 0 :(得分:1)

如果您想自动将其设置为调用/保存此字段的任何内容,请查看制作custom field。具体来说,在to_python中设置数据库到模型的转换,在get_prep_value中设置模型到数据库的转换。

如果这是专门针对管理员某个区域的行为,您也可以在ModelAdmin中进行全部设置。 list_display可以指向只读字段,可以对输出执行任何操作。

Pure admin:

class ModelAdmin(admin.ModelAdmin):
    list_display = ('_myfield',)
    readonly_fields = ('_myfield', )
    form = MyModelForm # modelform with overriden save() and init
    # converting values to / from db.

    def _myfield(self, obj):
        return whatever_conversion_here(obj.myfield)