2016-11-26 3 views
2

je suis nouveau sur django et j'ai besoin de votre aide, essayant depuis plusieurs jours de comprendre django-autocomplete-light, après avoir configuré mon test, http://192.168.0.108:8000/country-autocomplete/ le travail, les données sont montré comme explaned ici http://django-autocomplete-light.readthedocs.io/en/master/tutorial.html#overviewdjango-autocomplete-light error = l'objet 'list' n'a pas d'attribut 'queryset'

Mais après avoir suivi l'étape suivante, je reçois l'erreur:

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 

voici ma configuration:

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 

vue (y compris sous forme trop)

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() 
+1

Veuillez vérifier le code que vous avez partagé. Cela ne semble pas correct. - Exemple, le modèle 'url' cible' autos', mais votre 'url' est juste' auto' – karthikr

+0

je le change de r '^ autos? $ À r'^auto $ ', toujours la même émission – Kef

+0

Post trace complète s'il vous plaît – jpic

Répondre

2

J'ai eu le même problème. Le problème ici est avec le widget. J'ai essayé de le réparer très longtemps. La seule façon de travailler pour moi était de changer le widget de la forme.

Si ce n'est pas si important que vous pouvez utiliser autocomplete.ListSelect2 à la place, cela a fonctionné pour moi.

Donc, essayez ceci:

class Form_country(forms.ModelForm): 
    class Meta: 
     model = Country 
     fields = ('name', 'code2l') 
     widgets = { 
      'name': autocomplete.ListSelect2(
      'country-autocomplete' 
      ) 
     } 

En fait, vous pouvez juste essayer tout autre widget de saisie semi-automatique et voir la météo il fonctionne

0

Je vous créez le widget à __init__(), alors ce travail autour de issue #790 aide:

form.fields['name'].widget.choices = form.fields['name'].choices