1

我有一个模型

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

在我select2用来使选择框更好的 UI 上。现在我想为每个选择框添加像“-select-”这样的占位符。Select2 支持占位符,但在这种情况下它需要第一个空选项。所以我需要在类别选择列表中插入一条空记录。不幸的是,类别没有choices成员(因为它不是 SelectField)。另外,我不能在字段定义中使用参数allow_blankplaceholder因为它不接受空白记录。

如果我通过查询替换QuerySetSelectFieldSelectField填充它,设置coerceObjectId,它正在工作,但我无法插入空值,因为它正在发送到服务器并导致错误“None is not ObjectId”。

我怎样才能达到预期的行为?

4

1 回答 1

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'
});
于 2013-10-31T13:47:56.163 回答