'Django_filters with django-autocomplete-light
I am using django-autocomplete-light with django_filters. I looked django-filter with django autocomplete-light, but my autocomplete doesn't work.
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:
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
urlpatterns = [url(r'^search/ProfessionalDevelopment-autocomplete/$', ProfessionalDevelopmentAutocomplete.as_view(),
name='ProfessionalDevelopment-autocomplete']
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). Although no error, but I can not type in the text input box. Could someone help me? Thanks
Solution 1:[1]
You wan to filter model ProfessionalDevelopment against it's name.
You need to modify in these steps:
Complete
stror Unicode on modelProfessionalDevelopmentotherwise the option shows on filter will beid.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.nameChange filter field of
ProfessionalDevelopment:ProfessionalDevelopment = django_filters.ModelChoiceFilter( queryset=ProfessionalDevelopment.objects.all(), widget=autocomplete.ModelSelect2(url="yourcompleteurl") )
these steps should address you problem. Don't forget add {{ form.media }} in your template.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | bad_coder |
