簡體   English   中英

Django 可以用 CreateView 設計 AJAX 場過濾器嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM