0

Я хотел бы использовать django-autocomplete-light, чтобы автозаполнять некоторые поля из внешней базы данных, которые нельзя настроить в соответствии с требованиями DjangoORM. Поэтому я использую SQL Alchemy для подключения к этому db.django-autocomplete-light using SQL Alchemy вместо Django ORM

Я не могу узнать, как это сделать. В качестве примера я хотел бы сделать автозаполнение использовать следующее вместо Django модели для таблицы (который не работает, потому что есть двойная ключевой столбец первичной и нет поля ID.

query = (session.query(TableA.FIRSTNAME).distinct(TableA.FIRSTNAME) 
       .filter(TableA.FIRSTNAME.match(name))) 
data = query.limit(100).all() 

Эффективно я хотел бы сделать поле автозаполнения имен из моего вышеупомянутого запроса Вместо того, чтобы использовать СМО Django, как показано в документации:.

class CountryAutocomplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self): 
     # Don't forget to filter out results depending on the visitor ! 
     if not self.request.user.is_authenticated(): 
      return Country.objects.none() 

     qs = Country.objects.all() 

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

     return qs 

class PersonForm(forms.ModelForm): 
    birth_country = forms.ModelChoiceField(
     queryset=Country.objects.all(), 
     widget=autocomplete.ModelSelect2(url='country-autocomplete') 
    ) 

ответ

0

Ки, я думаю, что мне удалось найти мое решение

я могу использовать. Select2ListView, действующий на запрос SQL Alchemy, который r eturns список:

в views.py

from .forms import get_choice_list 

class Select2ListViewAutocomplete(autocomplete.Select2ListView): 
    def create(self, text): 
     return text 

    def get_list(self): 
     return get_choice_list(name=self.q) 

В forms.py я следующее:

from dal import autocomplete 

def get_choice_list(name=''): 
    return dbc.extract_distinct_typecode(typeCode=name) 

class SelectTypeForm(forms.Form): 
    typeCode = autocomplete.Select2ListCreateChoiceField(choice_list=get_choice_list, widget=autocomplete.ListSelect2(url='typecode-autocomplete')) 

где dbc.extract_distinct_typecode является вызов функции, которая использует SQL Алхимия для извлечения списка кодов. Я ограничил длину списка кодов, чтобы скорость была хорошей.

и urls.py У меня есть следующие:

urlpatterns = [ 
    url(r'^typecode-autocomplete/$', Select2ListViewAutocomplete.as_view(), name='typecode-autocomplete'),] 

его, вероятно, хорошая идея, чтобы обеспечить аутентификации пользователя, так что URL не возвращает результаты для любого пользователя.

 Смежные вопросы

  • Нет связанных вопросов^_^