我正在構建一個Web應用程序(在Django中),它將接受搜索條件並顯示報告 - 一旦用戶對結果滿意,將條件和參考這些對象返回到數據庫。單一頁面上多種形式的優雅解決方案
我有是找到一個很好的解決方案對於具有2種形式所述的問題:
- 顯示(GET)的他們的標準的結果。
- 輸入一些描述,並將所有內容保存(POST)回數據庫。
我傾向於AJAX的GET東西和POST保存,但我想確保沒有更優雅的解決方案。
我正在構建一個Web應用程序(在Django中),它將接受搜索條件並顯示報告 - 一旦用戶對結果滿意,將條件和參考這些對象返回到數據庫。單一頁面上多種形式的優雅解決方案
我有是找到一個很好的解決方案對於具有2種形式所述的問題:
我傾向於AJAX的GET東西和POST保存,但我想確保沒有更優雅的解決方案。
在實現ajax之前,我會嘗試使JavaScript禁用的表單工作。這兩種形式可以指向相同的觀點。 對於路由操作,您可以使用<button type="submit">
標記,其中name
value
屬性已填充,而不是<input type="submit">
。
的2點形成模板
<form action="{% url your-url %}" method="get">
<input type="text" name="q" value="{{ q }}">
<button type="submit" name="action" value="search">Search</button>
</form>
{% if entries %}
...
<form action="{% url your-url %}" method="post">
<input type="hidden" name="q" value="{{ q }}">
<button type="submit" name="action" value="save">Save entries</button>
</form>
{% endif %}
的不那麼難看一種形式模板
<form action="{% url your-url %}" method="post">
<input type="text" name="q" value="{{ q }}">
<button type="submit" name="action" value="search">Search</button>
{% if entries %}
...
<button type="submit" name="action" value="save">Save entries</button>
{% endif %}
</form>
然後,抓住 「動作」 到您的視圖,這樣的代碼(未測試)
def your_view(request, *args, **kwargs):
action = request.REQUEST.get('action', None)
if request.method == 'POST' and action == 'save':
# do the save stuff
elif action == 'search':
# no need to check if it's a GET
if request.REQUEST.get('q', None):
# do the display stuff
else:
# q required, maybe push a warning message here
else:
# default stuff
return # the response ...
然後你可以一些ajax
在我看來,保存的列表應該使用formset_factory(http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets)創建。當你打算保存模型時,真的沒有理由循環request.POST ['list'] .getitems()。
Xavier的視圖/控制器設置是正確的,以檢測搜索或表單提交。