2012-04-18 101 views
0

因此,我想創建一個動態表單,其中第二個下拉框基於第一個下拉列表填充。基於關閉下拉選擇創建動態下拉選項 - 卡住

我正在使用ajax & jquery幫助在我的django項目中構建這個動態表單,我需要一些幫助。我已經讓ajax調用正常工作,並且我已將選擇發回給表單,但現在我無法用我的選擇填充表單。

有人能幫我把json輸出變成html選項嗎?

這裏是我的ajax.py:

def switch_plan(request, *args, **kwargs): 
    from plans.models import Plan, OwnershipType, MemberType, PlanMember 
    from datetime import datetime 
    now = datetime.now() 
    json = {} 
    data = request.POST 
    plan_type = data.get('plan-plan_type') 
    print plan_type 

    if request.is_ajax(): 
     if plan_type == '5': 
      ownership = OwnershipType.objects.all().exclude(id=3).exclude(id=8).exclude(id=9) 
      json['owner_types'] = ownership 

    return HttpResponse(simplejson.dumps(json), mimetype='application/json') 

我plans.html JS代碼:

<script type="text/javascript"> 
$(function(){ 
    $("#id_plan-plan_type").change(function() { 
     q = $("form").serialize(); 

     $.ajax({ 
      type: "POST", 
      url: "{% url plans-switch_plan %}", 
      dataType: "json", 
      data: q, 
      success: function(json) { 
       //need help here 
      } 
     }); 
    }); 
}); 

$("#id_plan-ownership_type")是選擇欄,我需要添加的選項。

編輯我的JSON輸出如下{'owner_types': [<OwnershipType: Corporate/Non-Corporate>, <OwnershipType: Estate>, <OwnershipType: In Trust For>, <OwnershipType: Joint Subscriber>, <OwnershipType: Single Subscriber>, <OwnershipType: Tenants in Common>]}

+1

另一方面:最好不要使用硬編碼的'id's for'OwnershipType'或'pla視圖中的n_type'對象。除了完全難以閱讀外,它還取決於數據庫的格式是否正確。如果你只是在某種類型的slug類型的字段上有一個索引,那麼你就不會採用任何顯着的速度懲罰來代替,而且它會使維護這個代碼變得更容易。 – Dougal 2012-04-18 17:40:32

+0

@Dougal謝謝,我會改變 – TheLifeOfSteve 2012-04-18 17:41:32

+0

你試過[django-smart-selecting](https://github.com/digi604/django-smart-selects)嗎? – okm 2012-04-18 17:51:39

回答

1

在你成功回調:

$.each(json.owner_types, function(i, value){ 
    var opt = $("<option></option>"); 
    opt.text(value.name); 
    opt.val(value.id); 
    $("#id_plan-ownership_type").append(opt); 
}) 

您還需要您的模型數據提取到一個JSON序列化的類型像字典一樣的東西沿以下行:

json["owner_types"] = [{"name": o.name, "id": o.id} 
     for o in OwnershipType.objects.all()] # or .filter(...) 
+0

我更新了我的帖子,以顯示json輸出 – TheLifeOfSteve 2012-04-18 17:40:30

+0

它似乎沒有做任何事情..幾乎就像它不成功? – TheLifeOfSteve 2012-04-18 17:42:04

+0

我敢肯定,這不是你的JSON輸出,看起來像一個Python的'repr()'。你能看到AJAX應用程序正在使用螢火蟲嗎?通常情況下,你不能只用'dumps()'序列化django模型,你需要將相關數據提取到simplejson可以處理的內容中(例如字典)。 – AdamKG 2012-04-18 17:42:38