2013-10-31 56 views
1

我有一個像插入空選項QuerySetSelectField

class AppMetaForm(BaseForm): 
    category = QuerySetSelectField('CATEGORY'), queryset=AppCategory.objects()) 
    ..... 

在UI的模型我使用select2做出選擇框更好。現在我想爲每個選擇框添加如'-select-'的佔位符。 Select2支持佔位符,但在這種情況下它需要第一個空選項。所以我需要插入一個空的記錄到類別選擇列表。不幸的是,類別沒有choices成員(因爲它不是SelectField)。另外,我不能在字段定義中使用參數allow_blankplaceholder,因爲它不接受空白記錄。

如果我更換QuerySetSelectFieldSelectField,並通過查詢填充它,建立coerceObjectId,它是工作,但因爲它是發送給服務器並造成錯誤「無不是的ObjectId」我不能插入空值。

我該如何達到理想的行爲?

回答

0

找到了快速修復。我仍然不知道如何更新服務器端的選擇,我主要是在客戶端上做的。一個音符用於服務器端 - 在模板中添加屬性到現場data-placeholder="-select-"


$('select[data-placeholder]').each(function() { 

    //Check whether any option is `selected`, pseudoattribute `:selected` here is unacceptable 
    var selected = $('option[selected]', this); 
    if (!selected.length) { 

     //Creating fake option with valid but fake ObjectId and select it. 
     //If form returned after validation it already has `selected` option and I will not add placeholder to select. 
     var option = $('<option>', { 
      html: $(this).attr('data-placeholder'), 
      selected: 'selected', 
      value: '000000000000000000000000' 
     }); 

     //Add this option first 
     $(this).prepend(option); 
    } 
}); 

//Initialise all select tags with `select2` widget 
$('select', container).select2({ 
    minimumResultsForSearch: -1, 
    width: 'element' 
});