2017-04-01 3 views
0

ich benutze django-wählbar und ich werde nervös: |Django auswählbar don 't drop down autocomplete

models.py

@python_2_unicode_compatible  
class Filing(models.Model): 


    company = models.CharField(max_length=60, null=True) 
    ticker = models.CharField(max_length=5, null=True) 
    number = models.CharField(max_length=15, null=True) 
    description = models.CharField(max_length=100, null=True) 
    url = models.CharField(max_length=110, null=True) 
    created_date = models.DateTimeField(null=True) 


    def __str__(self): 
     return self.ticker 

lookups.py

from __future__ import unicode_literals 
from selectable.base import LookupBase 
from selectable.registry import registry 
from .models import Filing 

class CompanyLookup(LookupBase): 

    model = Filing 
    search_fields = ('company__icontains',) 

registry.register(CompanyLookup) 

So funktionieren nicht :(aber

andere lookups.py

from __future__ import unicode_literals 
from selectable.base import LookupBase 
from selectable.registry import registry 
from .models import Filing 

class CompanyLookup(LookupBase): 

    def get_query(self, request, ticker): 
     data= Filing.objects.values_list('company',flat=True)  
     return [x for x in data if x.startswith(ticker)] 


registry.register(CompanyLookup) 

Werke, Tropfen runter, aber nur mit dem attr ibutes von "startswith" und ich brauche "icontains". Auch funktioniert nicht "istarswith", weder "enthält":

In meinen Konsolen:

Request URL:http://127.0.0.1:8000/assets/flash/ZeroClipboard.swf?  noCache=1491057317592 
Request Method:GET 
Status Code:404 Not Found 
Remote Address:127.0.0.1:8000 

und:

Uncaught ReferenceError: jQuery is not defined 
at jquery.dj.selectable.js?v=0.9.0:390 
(anonymous) @ jquery.dj.selectable.js?v=0.9.0:390 




$(document).ready(function() { 
    // Patch the django admin JS 
    if (typeof(djselectableAdminPatch) === "undefined" || djselectableAdminPatch) { 
     djangoAdminPatches(); 
    } 
    // Bind existing widgets on document ready 
    if (typeof(djselectableAutoLoad) === "undefined" || djselectableAutoLoad) { 
     window.bindSelectables('body'); 
    } 
}); 
})(jQuery || grp.jQuery); <------ this is the line 390 

auch nicht verstehen, warum ich da in der Ansicht Quelle Code der

<script type="text/javascript"src="/static/javascript/jquery.dj.selectable.js"></script> 

korrekt

geladen

Vielen Dank im Voraus, wenn Sie mir helfen können.

Antwort

0

Versuchen Sie folgendes:

def get_query(self, request, ticker): 
    return list(Filing.objects.filter(company__icontains=ticker).values_list('company', flat=True)) 

Sie möchten, dass Ihre Daten in Ihrer Datenbank filtern. Nicht in Python. Ihre Datenbank ist viel schneller. Wenn Sie tun, geben Sie eine Liste, kein Abfrage-Set zurück. Sie können Ihr Abfrage-Set in der Datenbank filtern, indem Sie in der Filtermethode eines Abfrage-Sets field__icontains=value setzen.

+0

es funktioniert perfekt !! :) und sehr elegante Lösung .. vielen Dank .. – pepew