[英]Django can AJAX field filter be designed with CreateView?
我已經擁有一個處理創建對象的CreateView
。 我想知道是否可以簡單地將 AJAX 響應放在get
方法中,以允許根據先前的選擇過濾表單字段。
例如,如果用戶在“類別”字段中選擇了一個名為“食品/飲料”的選項,那么我發送一個 AJAX 請求以GET
針對該類別過濾的查詢集,然后更新表單。
這是如何實現的嗎?
這通常是在get_queryset
方法還是其他方法中完成?
這通常在單獨的視圖中完成嗎? 我應該為此使用與CreateView
無關的通用View
嗎?
讓我給你一個開始。
通常的做法是使用 Ajax 來異步觸發視圖函數。 基本設置如下所示:
Ajax
get_queryset = function () {
$.ajax('get_queryset/', {
method: 'GET',
async: "True",
dataType: "json",
success: function(response) {
var queryset = response;
item = queryset[0].fields.datafield;
},
})
}
視圖.py
# Async Function for Ajax
def get_query(*args, **kwargs):
# Query all Objects from Model
queryset = serializers.serialize('json', Entry.objects.all())
return HttpResponse(queryset)
網址.py
urlpatterns = [
path('app/get_queryset/', get_query),
]
我希望這就是你所指的。
編輯關於過濾:
您直接在視圖中過濾查詢集。 以便服務器通過 AJAX 將所需數據返回到客戶端。 另請注意,適當的查詢過濾可以減少對數據庫的查詢量,從而提高速度(盡管這不應該是小型應用程序中的關鍵影響)。
Django 內置了一大堆過濾器和異常方法: https://docs.djangoproject.com/en/3.0/topics/db/queries/
檢查making queries
。
此外,如果您想使用新數據更新 html,您可以循環查詢數據集並為查詢集中的每個項目操作目標 html,如下所示:
{% for item in queryset %}
<p>{{ item.field_name_one }}</p>
[...]
[...]
<p>{{ item.field_name_two }}</p>
{% endfor %}
因此,如果數據庫查詢從數據庫返回 5 個項目,它將創建 5 個<p>
元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.