我製作了一個django應用程序,可以即時創建模型和數據庫表。據我所知,這是做我所需要的唯一可行的方式。問題在於如何在頁面之間傳遞動態創建的模型。Django - 如何在頁面之間傳遞動態模型
我可以想到一些這樣做的方法,但它們都聽起來很可怕。我能想到的方法是:
- 在views.py中使用全局變量。這似乎是一個可怕的黑客攻擊,並且如果有多個同時用戶,可能會導致衝突。
- 在URL中傳遞引用並使用一些eval hackery來嘗試並重新模型。這可能是愚蠢的,因爲模型可能在途中被垃圾收集。
- 使用佔位符應用程序。這似乎是一個壞主意,因爲多個用戶之間的衝突。
- 有一個不可見的窗體,當單擊鏈接時發佈模型。再次很hacky。
有沒有這樣做的好方法,如果不是,這些方法之一是否比其他方法更可行?
P.S.以防止我的應用程序從預先存在的數據庫接收數據(作爲json字符串),然後將其緩存到本地(即在Web服務器上),以便即時創建適當的模型和表。然後,這個想法就是呈現這些數據,並對其進行各種過濾和深入研究,而不會對主數據庫造成過度的壓力(因爲每個查詢從數億個數據點的數據庫中返回幾百個結果)W.R.T.在圖3中,表格基於查詢和時間戳的散列來命名,但是佔位符應用將具有預定的名稱。
感謝,
jhoyla
編輯補充:謝謝你們,我現在已經解決了這個問題。我最終使用了兩個答案來給出一個完整的答案。因爲我只能接受一個,我會接受一個內容類型,可惜我沒有聲望給予支持,但是如果/當我做這些時,我會盡力返回並適當地提出上調。
在它的整體解決方案,
from django.contrib.contenttypes.models import ContentType
view_a(request):
model = create_model(...)
request.session['model'] = ContentType.objects.get_for_model(model)
...
view_b(request):
ctmodel = request.session.get('model', None)
if not ctmodel:
return Http404
model = ctmodel.model_class()
...
而不是將數據複製到另一個數據庫,你有沒有考慮過使用類似的Memcache或另一個緩存層? – mipadi 2012-07-11 16:38:43
你使用的應用名稱是什麼? – Hassek 2012-07-11 16:41:17
我理論上可以使用Memcache或類似的東西,但獲得法律批准的新軟件是一場噩夢。更容易讓自己成爲一個人。 – jhoyla 2012-07-12 08:48:13