如何在我的Django模型的属性上运行过滤器?

时间:2011-08-09 01:45:42

标签: django

我正在使用模型具有payload属性,其中包含Base64编码的JSON。 我正在编写管理员视图,这将合并此模型和其他几个人所代表的数据。

  1. 我想在ModelAdmin次视图中显示JSON的Base64解码版本。
  2. 我还想运行一个返回行的查询,以便解码的JSON中的特定元素与值匹配。
  3. 这在Django中可行吗?

2 个答案:

答案 0 :(得分:1)

您必须使用以下代码创建自定义管理模板:

{% extends "admin/change_form.html" %}
{% load i18n %}

{% block content %}
    This is the field: {{ original.payload }}
    {{ block.super }}
{% endblock %}

将其保存为“templates / admin / change_model_payload.html”并将其添加到模型的ModelAdmin中:

change_form_template = "admin/change_model_payload.html"

对于#2,您可能希望创建自定义模板标记以检索数据库条目。

答案 1 :(得分:1)

如果您期望特定类型的特定元素,那么您最好在save()上解码它,而不是盲目地将其存储在base64中。

  1. 没有简单的方法可以从base64编码的数据中获取信息。
  2. base64没有在字节边界上对齐,所以你不能查看编码数据并说“啊,启动属性xxx!”
  3. json应该已经在base64中编码了二进制数据,所以你不应该在base64中再次对它进行编码。
  4. 我的建议是创建一个包含所有预期属性的PayloadData类,与原始模型一对一,在存储有效负载时存储属性,以及索引,查询,过滤,订购,加入以及RDBMS允许您执行的任何其他有趣的事情。

    OR 抛弃数据库和Django自己的ORM并转到no-sql。大多数基于文档的nosql服务器都能够查询(或至少创建视图)任何类型的子字段条件。