djangautocompletelightv3自定义项的输出并将其保存在表单中

2024-09-29 23:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个(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))

表格:

^{pr2}$

模板自动完成/项目.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

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


Tags: the项目inobjget链接htmlcontext
1条回答
网友
1楼 · 发布于 2024-09-29 23:28:43

答案是直截了当的。在

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

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

现在转到dal文档:Overriding javascript code

看起来templateResult是在某个地方定义的自动完成.init.js. 是的,它在那边:django-autocomplete-light/src/dal_select2/static/autocomplete_light/select2.js:47

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

顺便说一下,您在代码中提到了data-html的内容。在

你可以调试js代码,控制台.log()并发现此函数适用于所有结果。在自动完成工作时动态获取,也可以通过页面html静态接收。这很好,所以您实际上需要做的就是以与呈现自动完成项相同的方式呈现“选择”选项。此外,根据您的代码,您甚至不必重新定义get_result_label()函数。在

class Obj(models.Model):
    ...
    def __str__(self):              # __unicode__ on Python 2
        template = get_template("autocomplete_light/item.html")
        context = Context({"item": self.name}) # self.name or whatever
        return template.render(context)
        # or just:
        # return '<a href="url">%s</a>' % self.name

class WordAutocomplete(autocomplete.Select2QuerySetView):
    ...
    # Do not redefine get_result_label()
    # 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'}),
        }

相关问题 更多 >

    热门问题