dur*_*enk 1 django django-filter django-autocomplete-light
有没有人成功地同时使用dal和django-filter?下面的尝试是我的,我尝试使用filterset_factory,提供模型类和字段列表,然后尝试使用futuremodelform。我有 ,
ModelForm没有指定模型类。
我认为这只是发生的许多错误之一。之前做过的任何人,我都必须使用filterset_factory,并根据参数创建动态类,我也想覆盖小部件,以便可以使用dal小部件。
#testing filterset
from dal import autocomplete
from django.db import models
class PanFilterSet(django_filters.FilterSet):
filter_overrides = {
models.ForeignKey: {
'filter_class': autocomplete.ModelSelect2,
},
}
def pan_filterset_factory(model,fields):
meta = type(str('Meta'), (object,), {'model': model,'fields':fields,'form':autocomplete.FutureModelForm})
filterset = type(str('%sFilterSet' % model._meta.object_name),
(PanFilterSet,), {'Meta': meta})
return filterset
searchFormFilterSet = pan_filterset_factory(self.model_class,self.final_search_fields)
f = searchFormFilterSet(self.request.GET, queryset=self.get_queryset())
print f.form.as_p()
Run Code Online (Sandbox Code Playgroud)
我对DAL不太熟悉,但是我为django-filter做出了贡献,并且对DAL的内部结构有相当的了解。一些注意事项:
filter_class你filter_overrides应该是一个过滤器,而不是一个小部件。您可以通过提供其他参数(如小部件)extra关键,因为看到这里。任何不属于过滤器的参数都会自动传递到基础表单字段。ForeignKey。Forms而不是ModelForms,因此Meta不会构造适当的内部类。FutureModelForm无论如何似乎都没有提供自动完成功能-似乎无关紧要?您的工厂将必须手动生成自动完成过滤器-类似于以下内容:
def dal_field(field_name, url):
return filters.ModelChoiceFilter(
name=field_name,
widget=autocomplete.ModelSelect2(url=url),
)
def dal_filterset_factory(model, fields, dal_fields):
attrs = {field: dal_field(field, url) for field, url in dal_fields.items()}
attrs['Meta'] = type(str('Meta'), (object,), {'model': model,'fields': fields})
filterset = type(str('%sFilterSet' % model._meta.object_name),
(FilterSet,), attrs)
return filterset
# Usage:
# mapping of {field names: autocomplete endpoints}.
dal_fields = {'birth_country': 'country-autocomplete'}
fields = ['list', 'or', 'dict', 'of', 'other', 'fields']
SomeModelFilterSet = dal_filterset_factory(SomeModel, fields, dal_fields)
Run Code Online (Sandbox Code Playgroud)
attrs使用声明性API 的字段。在文档中有更多信息。
| 归档时间: |
|
| 查看次数: |
1243 次 |
| 最近记录: |