禁用django自动完成指示灯中的选项

禁用django自动完成指示灯中的选项,django,django-autocomplete-light,Django,Django Autocomplete Light,刚开始使用django autocomplete light autocomplete.ModelSelect2,虽然我已经设法让它工作,但我想知道是否可以传递禁用的选项 我有一个客户列表可供选择,但由于各种原因,有些客户不应该被选中,他们不应该能够使用它们。我知道我可以过滤掉这些不可选择的客户,但这不是很有用,因为用户可能会认为客户不在数据库中。如果是这样的话,有人能给我指出正确的方向吗?因为我不知道从哪里开始 文件中说应该可以禁用选项。假设我还可以发送一个“disabled”:在返回的jso

刚开始使用django autocomplete light autocomplete.ModelSelect2,虽然我已经设法让它工作,但我想知道是否可以传递禁用的选项

我有一个客户列表可供选择,但由于各种原因,有些客户不应该被选中,他们不应该能够使用它们。我知道我可以过滤掉这些不可选择的客户,但这不是很有用,因为用户可能会认为客户不在数据库中。如果是这样的话,有人能给我指出正确的方向吗?因为我不知道从哪里开始


文件中说应该可以禁用选项。假设我还可以发送一个“disabled”:在返回的json响应中为true,可能会这样做。

好的,下面是我的想法,它可以工作

view.py

Select2ViewMixin是子类化的,然后在客户详细信息中添加“disabled”属性。此值由ParentAutocomplete视图提供

from dal import autocomplete
from dal_select2.views import Select2ViewMixin
from dal.views import BaseQuerySetView

class CustomSelect2ViewMixin(Select2ViewMixin):
    def get_results(self, context):
        return [
            {
                'id': self.get_result_value(result),
                'text': self.get_result_label(result),
                'selected_text': self.get_selected_result_label(result),
                'disabled': self.is_disabled_choice(result), # <-- this gets added
            } for result in context['object_list']
        ]

class CustomSelect2QuerySetView(CustomSelect2ViewMixin, BaseQuerySetView):
    """Adds ability to pass a disabled property to a choice."""

class ParentAutocomplete(CustomSelect2QuerySetView):

    def get_queryset(self):
        qs = Customer.objects.all()

        if self.q:
            qs = qs.filter(org_name__icontains=self.q)

        return qs.order_by('org_name', 'org_city')

    def get_result_label(self, item):
        return item.selector_name

    def get_selected_result_label(self, item):
        return item.selector_name

    def is_disabled_choice(self, item): # <-- this is where we determine if the record is selectable or not.
        customer_id = self.forwarded.get('customer_id', None)
        return not (item.can_have_children and not str(item.pk) == customer_id)
希望这对某人有用

from dal import autocomplete

class CustomerBaseForm(forms.ModelForm):
    customer_id= forms.IntegerField(required=False, widget=forms.HiddenInput)

    class Meta:
        model = Customer
        widgets = {
            'parent':autocomplete.ModelSelect2(
                url='customer:parent-autocomplete',
                forward=['customer_id'],
            )
        }