2011-08-09 26 views
2

我正在使用模型有一個​​屬性,其中包含Base64編碼的JSON。 我正在編寫管理視圖,它將整合由此模型和其他人表示的數據。如何在我的Django模型的屬性上運行過濾器?

  1. 我想在ModelAdmin視圖中顯示JSON的Base64解碼版本。
  2. 我也想運行一個查詢,它將返回行,使得解碼的JSON中的特定元素與值相匹配。

這是可以在Django嗎?

+0

創建一個表示JSON的模型(或其他對象)並使用序列化/反序列化來獲取值不是更爲謹慎嗎? –

+0

我澄清了這個問題。這個模型不是我的創作。就是這樣。我只需要找到解決這個問題的方法。 – canadadry

回答

1

你必須創建具有以下代碼的自定義管理模板:

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

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

保存爲,說,「模板/管理/ change_model_payload.html」,這增加了模型的ModelAdmin:

change_form_template = "admin/change_model_payload.html" 

對於#2,您可能需要創建一個自定義模板標籤來檢索數據庫條目。

1

如果您期望特定類型的特定元素,那麼您最好在save()上解碼它,而不是盲目地將它存儲在base64中。

  1. 沒有簡單的方法從base64編碼的數據獲取信息。
  2. base64不在字節邊界對齊,所以你不能看編碼的數據,並說「啊,那裏開始屬性xxx!」
  3. json應該已經有了以base64編碼的二進制數據,所以你不應該再用base64編碼它。

我的建議是創建一個PayloadData類,其中包含所有期望的屬性,與您的原始模型一一對應,保存()有效負載時的屬性以及可以索引的位置,查詢,篩選,排序,加入以及RDBMS允許您執行的其他有趣事情。

溝數據庫和Django自己的ORM,並去no-sql。大多數基於文檔的nosql服務器都可以查詢(或至少創建視圖)任何類型的子字段條件。