2017-07-25 50 views
0

我開始使用DAL,但我無法使用將值設置爲我的查詢集中的對象的PK的默認行爲。 因此,我重寫了'get_result_value'函數以將自定義字段設置爲我的選項的值。Django Autocomplete Light覆蓋html選項以返回自定義值

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')) 

你有什麼可能會造成這個任何想法錯誤? 謝謝

回答

1

嗯,這並不意味着一個完整的答案,但我完全在你的同一個搜索軌道上,你的Q把我放在一個「幾乎工作的方向」。

我的意思是說我實現了get_result_value按你的代碼,我可以在模板聽select2:select事件而得到新的值(這在我的情況是slug)與JS。

$('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 ...

+0

是的,你指的是data.id,因爲id在這裏指html標籤的id。 你有和我一樣的錯誤嗎? 「選擇一個有效的選擇,該選擇不是可用選項之一。」 – MiniYuuzhan