1

Ich möchte Python und Web-Dev lernen und ich versuche, eine funktionale Web-Anwendung zu machen. Im Moment habe ich Probleme mit Django-Autocomplete-Licht.Django django-autocomplete-light zeigt keine Ergebnisse

Ich versuche Autovervollständigung für meine Django-Anwendung zu verwenden. Ich folgte dem Tutorial, aber wenn ich versuche zu suchen, sagt es, dass The results could not be loaded. Aber Ergebnisse werden in der Dropdown-Liste angezeigt. List

trying to search

Ich habe ein Formular, in dem Benutzer neue invoce hinzufügen, ich versuche django-Autocomplete-Licht für Autovervollständigen alle Lieferanten zu verwenden, so Benutzer, um danach zu suchen nicht brauchen.

Meine Modelle:

class Supplier(models.Model): 
    supp_name = models.CharField(max_length=255) 
    mat_number = models.CharField(max_length=255) 
    organ = models.CharField(max_length=255, null=True, blank=True) 
    street = models.CharField(max_length=255, null=True, blank=True) 
    email = models.CharField(max_length=255, null=True, blank=True) 

    def __str__(self): 
     return self.supp_name.encode("utf-8") 

    def get_absolute_url(self): 
     return reverse('supplier-detail', args=[str(self.id)]) 

    def __unicode__(self): 
     return '%s' % (self.supp_name,) 

class Invoice(models.Model): 
    organization = models.ForeignKey(Group, help_text="organization") 
    input_peo = models.CharField(max_length=150) 
    date = models.DateTimeField(auto_now_add=True) 

    supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True, related_name='name') 

    invoice_number = models.CharField(max_length=100, null=True, blank=True, help_text='Številka preračuna') 
    price = models.FloatField(null=True, blank=True, help_text='Cena brez DDV') 
    sum_me = models.IntegerField(null=True, blank=True, help_text='Kolicina') 

    def __str__(self): 
     return self.organization.name.encode("utf-8") 

    def get_absolute_url(self): 
     return reverse('invoice-detail', args=[str(self.id)]) 

Meine Ansichten:

class AddInvoice(LoginRequiredMixin, generic.View): 
    login_url = '/accounts/login/' 
    redirect_field_name = 'redirect_to' 

    form_class = InvoiceCreate 
    template_name = 'invoce/invoce_form.html' 

    def get(self, request): 
     form = self.form_class(None) 
     return render(request, self.template_name, {'form': form}) 

    def post(self, request): 
     form = self.form_class(request.POST) 

     if form.is_valid(): 
      invoice = form.save(commit=False) 

      invoice.organization = request.user.groups.first() 
      invoice.input_peo = self.request.user.get_full_name() 
      invoice.supplier = form.cleaned_data['supplier'] 
      invoice.invoice_number = form.cleaned_data['invoice_number'] 
      invoice.price = form.cleaned_data['price'] 
      invoice.sum_me = form.cleaned_data['sum_me'] 

      invoice.save() 

      return HttpResponseRedirect('/') 

     return render(request, self.template_name, {'form': form}) 

''' 
* 
AUTOCOMPLETE 
* 
''' 

class SupplierAutoComplete(autocomplete.Select2QuerySetView): 
    def get_queryset(self): 
     qs = Supplier.objects.all() 

     if self.q: 
      qs = qs.filter(name__istartswith=self.q) 

     return qs 

Urls:

urlpatterns += [ 
    url(
     r'^autocomplete/$', 
     views.SupplierAutoComplete.as_view(model=Supplier), 
     name='supplier-autocomplete', 
    ), 
] 

Wenn ich in Browser nur für die automatische Vervollständigung (/ automatische Vervollständigung /) suchen das ist, was ich erhalten: autocomplete search

mein forms.py:

class InvoiceCreate(forms.ModelForm): 
    class Meta: 
     model = Invoice 
     fields = [ 
      'supplier', 
      'invoice_number', 
      'price', 
      'sum_me', 
     ] 

     widgets = { 
      'supplier': autocomplete.ModelSelect2(url='supplier-autocomplete') 
     } 

und schließlich Form meiner Vorlage:

{% extends "base_generic.html" %} 

{% block content %} 

<div class="jumbotron"> 
<div class="row" style="margin-top:60px"> 
<form action="" method="post"> 
    {% csrf_token %} 
     <!-- Left Inputs --> 
      <div class="col-xs-6 wow animated slideInLeft" data-wow-delay=".5s"> 
       <!-- Supplier --> 
       {{ form.non_field_errors }} 
       <div class="fieldWrapper"> 
        {{ form.supplier.errors }} 
        <label>Supplier:</label> 
        <div class="container"> 
         {{ form.supplier }} 
        </div> 
       </div> 

       <!-- invoice_number --> 
       {{ form.non_field_errors }} 
       <div class="fieldWrapper"> 
        {{ form.invoice_number.errors }} 
        <input type="text" name="invoice_number" id="id_invoice_number" placeholder="Invoice Number" class="form"/> 
       </div> 

       <!-- price --> 
       {{ form.non_field_errors }} 
       <div class="fieldWrapper"> 
        {{ form.price.errors }} 
        <input type="text" name="price" id="id_price" placeholder="Price" class="form"/> 
       </div> 


       <!-- sum_me --> 
       {{ form.non_field_errors }} 
       <div class="fieldWrapper"> 
        {{ form.sum_me.errors }} 
        <input type="number" name="sum_me" id="id_sum_me" placeholder="Sum" class="form"/> 
       </div> 


      </div><!-- End Left Inputs --> 
      <!-- Bottom Submit --> 
      <div class="relative fullwidth col-xs-12"> 
       <!-- Send Button --> 
       <button type="submit" class="form-btn semibold">Add</button> 
      </div><!-- End Bottom Submit --> 
      <!-- Clear --> 
      <div class="clear"></div> 

</form> 
</div> 
</div> 
{{ form.media }} 
{% endblock %} 

Dies ist Zurückverfolgungs ich erhalte, wenn ich versuche suchen:

[19/Aug/2017 14:29:54] "GET /invoice/autocomplete/?q=frnej HTTP/1.1" 500 16154 
[2017-08-19 14:29:54,630] - Broken pipe from ('127.0.0.1', 55490) 

Internal Server Error: /invoice/autocomplete/ 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/dal/views.py", line 48, in dispatch 
    return super(ViewMixin, self).dispatch(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch 
    return handler(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/views/generic/list.py", line 160, in get 
    self.object_list = self.get_queryset() 
    File "/Users/miha/Desktop/#application/django/einvoice/invoice/views.py", line 255, in get_queryset 
    qs = qs.filter(name__istartswith=self.q) 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 784, in filter 
    return self._filter_or_exclude(False, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 802, in _filter_or_exclude 
    clone.query.add_q(Q(*args, **kwargs)) 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1261, in add_q 
    clause, _ = self._add_q(q_object, self.used_aliases) 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1287, in _add_q 
    allow_joins=allow_joins, split_subq=split_subq, 
    File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 1212, in build_filter 
    raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0])) 
FieldError: Related Field got invalid lookup: istartswith 

Antwort

0

Ich denke, Sie müssen ersetzen:

qs = qs.filter(name__istartswith=self.q) 
#    ^^^^^ 

bis

qs = qs.filter(supp_name__istartswith=self.q) 
#    ^^^^^^^^^