我开始使用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'))
您是否知道导致此错误的原因是什么? 感谢
答案 0 :(得分:3)
嗯,这并不是一个完整的答案,但我正好在你的同一个搜索轨道上,你的Q让我处于“几乎工作的方向”。
我的意思是我按照你的代码实现了get_result_value
,我可以在模板中用JS获取新值(在我的例子中是slug
) 1}}事件。
select2:select
my views.py:
$('select').on('select2:select', function (event) {
console.log(event.params.data.id);
}
my forms.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()})
请注意,在上面的jQuery代码段中,我仍然引用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,
},
)
)
,但现在id
属性包含event.params.data.id
...