gpt4 book ai didi

django - 将 django mptt TreeNodeChoiceField 与 django-autocomplete-light ModelSelect2 小部件相结合

转载 作者:行者123 更新时间:2023-12-05 03:08:04 28 4
gpt4 key购买 nike

A django-mptt TreeNodeChoiceField提供缩进的选择选项,而我可以使用 django-autocomplete-light 过滤我的结果.但是,ModelSelect2 小部件会覆盖呈现的 html,从而删除缩进。

我想把两者结合起来。知道如何实现这一点吗?

模型.py:

class Foo(MPTTModel):
name = models.CharField(max_length=50)
parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)

class MPTTMeta:
order_insertion_by = ['name']

表单.py:

class FooForm(forms.ModelForm):
parent = TreeNodeChoiceField(queryset=Foo.objects.all(), widget=autocomplete.ModelSelect2(url='foo-autocomplete'))

class Meta:
model = Foo
fields = ('name', 'parent', )

最佳答案

我会在这里留下我的解决方案,以防有人试图实现相同的目标。

在深入研究 django-mptt 源代码和 django-autocomplete-light 示例后,我发现您可以覆盖选择选项的显示文本。另外,django-mptt 使用节点的级别来插入正确的缩进。我的模型和形式保持不变。我只需要重写自动完成 View 的 get_result_label() 方法:

from mptt.settings import DEFAULT_LEVEL_INDICATOR

class FooAutocomplete(autocomplete.Select2QuerySetView):
def get_result_label(self, item):
level_indicator = DEFAULT_LEVEL_INDICATOR * item.level
return level_indicator + ' ' + str(item)

def get_queryset(self):
qs = Foo.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs

关于django - 将 django mptt TreeNodeChoiceField 与 django-autocomplete-light ModelSelect2 小部件相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46153557/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com