提供ajax搜索功能的django应用程序。
django-yaaac的Python项目详细描述
yaaac是一个轻量级django应用程序,为外键表单字段提供ajax搜索。
版本3升级警告
这个版本带来了与python 3.6的兼容性和一个小的回归。 默认的suggest_by现在是__str__,而不是__unicode__,所以检查 那Django documentation 迁移代码。
django 2-2和3.2版重要说明
自从django-2.2以来 结果在管理中破坏了这个库。修复方法是embbed jQuery并设置 widgets媒体类中的依赖性,这可能导致其他回归。
自从autocomplete solution 现在是内置的django管理,对该管理的支持已被删除。
安装
从源安装应用程序:
python setup.py build && (sudo) python setup.py install
或者使用pip:
pip install django-yaaac
(对于django<;1.8,请使用以前的版本,如pip install django-yaaac==1.9.0)
在您的设置中添加应用程序。已安装的应用程序:
INSTALLED_APPS=[...,"django_yaaac",...,]
在项目的urls.py模块中,定义ajax调用的url模式:
fromdjango_yaaac.managerimportautocompletefromdjango.conf.urlsimporturlurlpatterns=[...url(r'^yaaac/',autocomplete.urls),...]
用法
表格
您需要做的是声明一个自定义的modelform:
fromdjangoimportformsfromdjango.contribimportadminfromdjango_yaaac.forms.fieldsimportAutocompleteModelChoiceFieldfrom.importmodelsclassBandMemberForm(forms.ModelForm):band=AutocompleteModelChoiceField(site=admin.site,queryset=models.Band.objects.all(),yaaac_opts={"search_fields":["^name"],"suggest_by":"get_full_name","min_chars":3,# Fire search when 3 chars are sent (1 by default.)"max_height":400,# 300px by default."width":250,# 300px by default.},required=True)classMeta:model=models.BandMemberclassMedia:# You need jQuery. Don't forget to call {{ form.media }} in your template.js=('js/jquery.min.js',)admin.site.register(models.BandMember,BandMemberAdmin)
相关查找需要AutocompleteModelChoiceField的site参数 放大镜)。search_fields是使用相同语法搜索的字段列表 在Django管理(^,$等)。 额外选项min_chars,max_height和width是minchars,maxheight和width的计数器部分。 在Autocomplete options中。
suggest_by是可选的。它可以是模型的字段或方法。 默认情况下,建议使用\u unicode\uuu方法显示。
如果您的模型定义了一个get_absolute_url()方法,那么标签就是指向该资源的链接。
型号
Yaaac类必须定义以下内容:
- user_passes_test是接受用户并返回True或False的类方法
- allows_suggest_by是一个模型字段或方法的列表,可被搜索视图用作返回值。
classBandMember(models.Model):first_name=models.CharField(max_length=100)last_name=models.CharField(max_length=100)band=models.ForeignKey("Band",null=True,blank=True)favorite_instrument=models.ForeignKey("Instrument",null=True,blank=True)classMeta:unique_together=(('first_name','last_name'),)classYaaac:user_passes_test=lambdainstance,user:useranduser.is_authenticated()orFalseallows_suggest_by=['get_full_name']def__unicode__(self):returnu"%s%s"%(self.first_name,self.last_name)defget_full_name(self):returnu"%s%s"%(self.first_name,self.last_name)
调谐
为了简化dom操作,在元素中添加了html类。最有趣的是yaaac_<fieldname> 存储外键值的隐藏输入。当您需要将行为添加到整个 字段集-也就是那些在页面创建时不存在的共享同一名称的字段。
使用jquery委托(即$(".foo").on("change", ".yaaac_first_name"))在一个字段上为所有人放置一个事件 页面中或将要出现的内联表单(即单击“添加新的乐队成员”。)