Django Autocomplete Light 将 html 选项覆盖为 return 自定义值
Django Autocomplete Light override html options to return custom value
我开始使用 DAL,但我无法使用将值设置为查询集中对象的 PK 的默认行为。
因此,我覆盖了 'get_result_value' 函数以将自定义字段设置为我的选项的值。
class CategoryAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
country = Agent.get_user_country(self.request.user)
if not self.request.user.is_authenticated():
return Category.objects.none()
qs = Category.objects.filter(country=country)
if self.q:
qs = qs.filter(full_category__icontains=self.q)
return qs
def get_result_value(self, result):
return result.special_key
我的问题是,当我提交时出现此 ModelChoiceField 错误:
Select a valid choice. That choice is not one of the available choices.
这是表格:
class OnsiteCategoryForm(forms.Form):
category = forms.ModelChoiceField(queryset=Category.objects.all(), required=True,
widget=autocomplete.ModelSelect2(url='category_autocomplete'))
您是否知道可能导致此错误的原因?
谢谢
好吧,这并不是一个完整的答案,但我正好在你的同一个搜索轨道上,你的 Q 把我放在 "almost-working-direction"。
我的意思是我根据您的代码实现了 get_result_value
并且我可以通过模板中的 JS 获取新值(在我的例子中是 slug
) select2:select
事件。
$('select').on('select2:select', function (event) {
console.log(event.params.data.id);
}
我的views.py:
class DjProfileAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = DjProfile.objects.all()
return qs.filter(name__icontains=self.q) if self.q else qs
def get_result_value(self, result):
return result.slug
def home(request):
return render(request, 'home.html', {'form': HomeForm()})
我的forms.py:
class HomeForm(forms.Form):
dj_name = forms.ModelChoiceField(
queryset=DjProfile.objects.all(),
widget=autocomplete.ModelSelect2(
url='dj-autocomplete',
attrs={
# Set some placeholder
'data-placeholder': 'Trova Dj',
# Only trigger autocompletion after 3 characters have been typed
'data-minimum-input-length': 3,
},
)
)
请注意,在上面的 jQuery 片段中我仍然引用 id
,但现在 event.params.data.id
属性包含 slug
...
我开始使用 DAL,但我无法使用将值设置为查询集中对象的 PK 的默认行为。 因此,我覆盖了 'get_result_value' 函数以将自定义字段设置为我的选项的值。
class CategoryAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
country = Agent.get_user_country(self.request.user)
if not self.request.user.is_authenticated():
return Category.objects.none()
qs = Category.objects.filter(country=country)
if self.q:
qs = qs.filter(full_category__icontains=self.q)
return qs
def get_result_value(self, result):
return result.special_key
我的问题是,当我提交时出现此 ModelChoiceField 错误:
Select a valid choice. That choice is not one of the available choices.
这是表格:
class OnsiteCategoryForm(forms.Form):
category = forms.ModelChoiceField(queryset=Category.objects.all(), required=True,
widget=autocomplete.ModelSelect2(url='category_autocomplete'))
您是否知道可能导致此错误的原因? 谢谢
好吧,这并不是一个完整的答案,但我正好在你的同一个搜索轨道上,你的 Q 把我放在 "almost-working-direction"。
我的意思是我根据您的代码实现了 get_result_value
并且我可以通过模板中的 JS 获取新值(在我的例子中是 slug
) select2:select
事件。
$('select').on('select2:select', function (event) {
console.log(event.params.data.id);
}
我的views.py:
class DjProfileAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
qs = DjProfile.objects.all()
return qs.filter(name__icontains=self.q) if self.q else qs
def get_result_value(self, result):
return result.slug
def home(request):
return render(request, 'home.html', {'form': HomeForm()})
我的forms.py:
class HomeForm(forms.Form):
dj_name = forms.ModelChoiceField(
queryset=DjProfile.objects.all(),
widget=autocomplete.ModelSelect2(
url='dj-autocomplete',
attrs={
# Set some placeholder
'data-placeholder': 'Trova Dj',
# Only trigger autocompletion after 3 characters have been typed
'data-minimum-input-length': 3,
},
)
)
请注意,在上面的 jQuery 片段中我仍然引用 id
,但现在 event.params.data.id
属性包含 slug
...