简体   繁体   English

带有django-autocomplete-light的Django_filters

[英]Django_filters with django-autocomplete-light

I am using django-autocomplete-light with django_filters. 我正在将django-autocomplete-light与django_filters一起使用。 I looked django-filter with django autocomplete-light , but my autocomplete doesn't work. 用django autocomplete-light看了django-filter ,但是我的自动完成功能不起作用。

Models.py: Models.py:

class ProfessionalDevelopment(models.Model):
   Name = models.CharField("Professional Development", max_length=20,default = "None")
   ProfessionalExperience = models.ManyToManyField(Person, through='PersonToProfessionalDevelopment')

class PersonToProfessionalDevelopment(models.Model):
   PersonID = models.ForeignKey(Person,  on_delete=models.CASCADE)
   ProfID = models.ForeignKey(ProfessionalDevelopment,  on_delete=models.CASCADE)
   Desc = models.CharField("Professional Development Description", max_length=30, default="None")

Views.py: Views.py:

class ProfessionalDevelopmentAutocomplete(autocomplete.Select2QuerySetView):
 def get_queryset(self):
    qs = ProfessionalDevelopment.objects.all()
    if self.q:
        qs = qs.filter(name__istartswith=self.q)
    return qs

urls.py urls.py

urlpatterns = [url(r'^search/ProfessionalDevelopment-autocomplete/$', ProfessionalDevelopmentAutocomplete.as_view(),
    name='ProfessionalDevelopment-autocomplete']

Filters.py: Filters.py:

ProfessionalDevelopment = django_filters.CharFilter(name='professionaldevelopment__Name', lookup_expr='icontains',
                                                    widget=autocomplete.ModelSelect2(url='RSR:ProfessionalDevelopment-autocomplete'))

I got an error says 'list' object has no attribute 'queryset'. 我收到一个错误消息,说“列表”对象没有属性“查询集”。 Then I changed the code to autocomplete.Select2 instead of autocomplete.ModelSelect2 (according to https://github.com/yourlabs/django-autocomplete-light/issues/763 ). 然后我将代码更改为autocomplete.Select2而不是autocomplete.ModelSelect2(根据https://github.com/yourlabs/django-autocomplete-light/issues/763 )。 Although no error, but I can not type in the text input box. 虽然没有错误,但是我无法在文本输入框中键入内容。 Could someone help me? 有人可以帮我吗? Thanks 谢谢

You wan to filter model ProfessionalDevelopment against it's name. 您希望根据模型的名称过滤模型ProfessionalDevelopment。 You need to modify in these steps: 1, complete str or unicode on model ProfessionalDevelopment otherwise the option shows on filter will be id. 您需要按照以下步骤进行修改:1,在ModelProfessionalDevelopment上完成str或unicode,否则过滤器上显示的选项将是id。

class ProfessionalDevelopment(models.Model):
   Name = models.CharField("Professional Development", 
   max_length=20,default = "None")
   ProfessionalExperience = models.ManyToManyField(Person, 
   through='PersonToProfessionalDevelopment')

   def __unicode__(self):
       return self.name

2, change filter field of ProfessionalDevelopment: 2,更改ProfessionalDevelopment的过滤器字段:

ProfessionalDevelopment = django_filters.ModelChoiceField(
    queryset=ProfessionalDevelopment.objects.all(), 
    widget=autocomplete.ModelSelect2(url="yourcompleteurl")
)

these steps should address you problem. 这些步骤应该可以解决您的问题。

and Don't forget add {{ form.media }} in your template 并且不要忘记在模板中添加{{form.media}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM