gpt4 book ai didi

python - django-autocomplete-light 使用 SQL Alchemy 而不是 Django ORM

转载 作者:行者123 更新时间:2023-12-01 03:33:06 29 4
gpt4 key购买 nike

我想使用 django-autocomplete-light 自动完成外部数据库中的一些字段,这些字段无法调整以符合 DjangoORM 要求。因此我使用 SQL Alchemy 连接到该数据库。

我不知道如何做到这一点。作为一个例子,我想让自动完成使用以下内容而不是表的 Django 模型(这不起作用,因为有一个双列主键并且没有 id 字段。

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

实际上,我想让该字段自动完成上述查询中的名称。而不是使用文档中所示的 Django qs:

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

最佳答案

好吧,我想我找到了解决方案。

我可以使用 Select2ListView 作用于返回列表的 SQL Alchemy 查询:

在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 Alchemy 提取代码列表的函数的调用。我限制了代码列表的长度,以便速度良好。

在 urls.py 中我有以下内容:

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

确保用户经过身份验证,这样 URL 就不会将结果返回给任何用户,这可能是个好主意。

关于python - django-autocomplete-light 使用 SQL Alchemy 而不是 Django ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40660849/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com