1

Je veux apprendre python et web-dev et j'essaie de faire une application web fonctionnelle. En ce moment j'ai un problème avec django-autocomplete-light. J'essaie d'utiliser la saisie semi-automatique pour mon application django. J'ai suivi le tutoriel, mais quand j'essaie de chercher Il dit que The results could not be loaded. Mais les résultats sont affichés dans la liste déroulante. ListDjango django-autocomplete-light ne pas montrer les résultats

trying to search

J'ai un formulaire où l'utilisateur peut ajouter une nouvelle invoce, je suis en train d'utiliser django-autocomplete-lumière pour tous les fournisseurs autocompleting ainsi l'utilisateur, n'a pas besoin de chercher.

Mes modèles:

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)]) 

Mes vues:

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', 
    ), 
] 

Si je recherche juste pour autocomplete (/ autocomplete /) dans le navigateur ce que je obtenir: autocomplete search

mon forms.py:

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

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

et enfin mon modèle pour la forme:

{% 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 %} 

C'est retraçage que je reçois quand je tente de recherche:

[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 

Répondre

0

Je pense, vous avez besoin de remplacer:

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

à

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