gpt4 book ai didi

django - django admin 中选择字段的可搜索下拉菜单

转载 作者:行者123 更新时间:2023-12-04 01:55:19 25 4
gpt4 key购买 nike

我有一个包含大量数据的选择字段,我在管理面板上创建了下拉菜单,但我想要一个可搜索的下拉菜单。

class ItemForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
super(PublicUserForm, self).__init__(*args, **kwargs)
self.fields['city'] = forms.ChoiceField(
choices = CHOOSE_CITY)

class ItemAdmin(admin.ModelAdmin):
form = ItemForm

admin.site.register(Item, ItemAdmin)

我已推荐 django-autocomplete-light .

提前致谢!

最佳答案

按着这些次序
使用 pip 安装 django 自动完成灯

pip install django-autocomplete-light
然后,通过添加到 INSTALLED_APPS 让 Django 找到我们需要的静态文件。 , 之前 django.contrib.admingrappelli如果存在
'dal',
'dal_select2',
#'grappelli',
'django.contrib.admin',
现在您需要创建一个自动完成 View ,该 View 将在您搜索时以过滤后的查询集进行响应。
from dal import autocomplete

from your_app.models import City


class CityAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):

if not self.request.user.is_authenticated():
return City.objects.none()

qs = City.objects.all()

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

return qs

Note: The base view for autocomplete view should be Select2QuerySetView.


现在注册自动完成 View 创建一个 named url为了 View
from your_app.views import CityAutocomplete

urlpatterns = [
url(
r'^city-autocomplete/$',
CityAutocomplete.as_view(),
name='city-autocomplete',
),
]
您现在可以在项目表单中使用自动完成 View 。使用 ModelSelect2创建小部件
from dal import autocomplete

from django import forms


class ItemForm(forms.ModelForm):
city = forms.ModelChoiceField(
queryset=City.objects.all(),
widget=autocomplete.ModelSelect2(url='city-autocomplete')
)

class Meta:
model = Item
fields = ('__all__')
现在您可以在管理员中轻松使用它。
from your_app.forms import ItemForm

class ItemAdmin(admin.ModelAdmin):
form = ItemForm

admin.site.register(Item, ItemAdmin)

Note: This will work if you have city field as a foreign key in theItem model.



city是您可以选择的字段 use autocompleting based on a list of Strings
使用 Select2ListView 创建一个 ListView 并覆盖 get_list方法
class CityAutocomplete(autocomplete.Select2ListView):
def get_list(self):
# return all cities name here, it will be auto filtered by super class
return ['Pune', 'Patna', 'Mumbai', 'Delhi', ...]
如上注册 URL,现在修改您的模型表单并使用 Select2ListChoiceField
def get_choice_list():
# all cites to used as chice list
return ['Pune', 'Patna', 'Mumbai', 'Delhi', ...]


class ItemForm(forms.ModelForm):
city = autocomplete.Select2ListChoiceField(
choice_list=get_choice_list,
widget=autocomplete.ListSelect2(url='city-autocomplete')
)

class Meta:
model = Item
fields = ('__all__')
正如我们在上面的例子中所做的那样,将此表单添加到 ModelAdmin。

关于django - django admin 中选择字段的可搜索下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50960800/

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