i am new on django and i need your help, trying since many days to understand django-autocomplete-light, after setup my test, http://192.168.0.108:8000/country-autocomplete/ work, data is showed like explaned here http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html#overview
But after following next step, i am getting error:
AttributeError at /auto
'list' object has no attribute 'queryset'
Request Method: GET
Request URL: http://192.168.0.108:8000/auto
Django Version: 1.10.3
Exception Type: AttributeError
Exception Value:'list' object has no attribute 'queryset'
Exception Location: /home/alcall/ENV/lib/python3.4/site-packages/dal/widgets.py in filter_choices_to_render, line 161
Below my setup:
urls:
from dal import autocomplete
from django.conf.urls import url
from django.contrib import admin
from rates.view.index import *
from rates.view.index import UpdateView
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(
r'^country-autocomplete/$',
CountryAutocomplete.as_view(),
name='country-autocomplete',
),
url(r'^auto$',
UpdateView.as_view(),
name='select',
),
]
models.py
from __future__ import unicode_literals
from django.db import models
class Country(models.Model):
enabled = models.IntegerField()
code3l = models.CharField(unique=True, max_length=3)
code2l = models.CharField(unique=True, max_length=2)
name = models.CharField(unique=True, max_length=64)
name_official = models.CharField(max_length=128, blank=True, null=True)
prix = models.FloatField()
flag_32 = models.CharField(max_length=255, blank=True, null=True)
flag_128 = models.CharField(max_length=255, blank=True, null=True)
latitude = models.DecimalField(max_digits=10, decimal_places=8, blank=True,$
longitude = models.DecimalField(max_digits=11, decimal_places=8, blank=True$
zoom = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'country'
def __str__(self):
return self.name
view (include form too)
from dal import autocomplete
from django.shortcuts import render
from rates.models import Country
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.http import HttpResponse
from django import forms
from django.core.urlresolvers import reverse_lazy
from django.views import generic
class CountryAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
# if not self.request.user.is_authenticated():
# return Country.objects.none()
qs = Country.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
class Form_country(forms.ModelForm):
class Meta:
model = Country
fields = ('name', 'code2l')
widgets = {
'name': autocomplete.ModelSelect2Multiple(
'country-autocomplete'
)
}
class UpdateView(generic.UpdateView):
model = Country
form_class = Form_country
template_name = 'fr/public/monformulaire.html'
success_url = reverse_lazy('select')
def get_object(self):
return Country.objects.first()
I had the same issue. The problem here is with the widget. Tried to fix it for very long. The only way in worked for me was changing form's widget.
If it doesn't matter that much you can use autocomplete.ListSelect2 instead, it worked for me.
So try this:
class Form_country(forms.ModelForm):
class Meta:
model = Country
fields = ('name', 'code2l')
widgets = {
'name': autocomplete.ListSelect2(
'country-autocomplete'
)
}
Actually you can just try any other autocomplete widget and see weather it works
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With