django-autocomplete-light v3自定义项目的输出并在表单中保存它

时间:2017-03-16 12:26:07

标签: python django django-autocomplete-light

在此之后(Customising the output of items using django-autocomplete-light v3),我自定义选项列表。

我的代码:

class WordAutocomplete(autocomplete.Select2QuerySetView):
 ...
 def get_result_label(self, obj):
     template = get_template("autocomplete_light/item.html")
     context = Context({"item": obj})
     return mark_safe(template.render(context))

表格:

class SentenceAdminForm(forms.ModelForm):
class Meta :
     widgets = {
              'word':autocomplete.ModelSelect2Multiple('WordAutocomplete',
                                                       attrs={'data-html': 'true'}),
               }

模板自动完成/ item.html:

<a href="url">{{ item }}</a>

如您所见,有链接,每个项目一个。

链接有效,直到我保存:

links are active in the list and in the select box

After saving, the links are no longer there

如何维护选择框中的链接?

1 个答案:

答案 0 :(得分:0)

答案很简单。

首先,请看一下有关select2本身的文章:Can I change how the placeholder looks?

好的,我们需要重新定义templateResult函数或者至少了解它是如何工作的。

现在转到dal docs:Overriding javascript code

看起来在autocomplete.init.js中的某处定义了templateResult。是的,它在那边:django-autocomplete-light/src/dal_select2/static/autocomplete_light/select2.js:47

功能本身:django-autocomplete-light/src/dal_select2/static/autocomplete_light/select2.js:7

顺便提一句,您在代码中提到了error C2039: 'tr1': is not a member of 'std' error C3083: 'tr1': the symbol to the left of a '::' must be a type 个内容。

您可以调试js代码,console.log()它,并发现此函数适用于所有结果。在自动完成工作时动态提取,并且还通过页面html静态接收。哪个好,所以你真正需要做的就是渲染选择选项的方式与渲染自动完成项目的方式相同。更重要的是,根据你的代码,你甚至不必重新定义get_result_label()函数。

data-html