简体   繁体   English

Django django-autocomplete-light 不显示结果

[英]Django django-autocomplete-light not showing results

I want to learn python and web-dev and I am trying to make a functional web application.我想学习 python 和 web-dev,我正在尝试制作一个功能性的 web 应用程序。 Right now I have problem with django-autocomplete-light.现在我有 django-autocomplete-light 的问题。

I am trying to use autocomplete for my django application.我正在尝试为我的 django 应用程序使用自动完成功能。 I followed the tutorial, but when I try to search It says that The results could not be loaded.我遵循了教程,但是当我尝试搜索时,它说The results could not be loaded. But results are shown in dropdown list.但结果显示在下拉列表中。 列表

试图搜索

I have a form where user can add new invoce, I am trying to use django-autocomplete-light for autocompleting all suppliers so user, doesn't need to search for it.我有一个表单,用户可以在其中添加新的发票,我正在尝试使用 django-autocomplete-light 来自动完成所有供应商,因此用户不需要搜索它。

My models:我的模型:

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

My views:我的观点:

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

If I search just for autocomplete (/autocomplete/) in browser this is what i get:如果我只在浏览器中搜索自动完成 (/autocomplete/),这就是我得到的: 自动完成搜索

my forms.py:我的forms.py:

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

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

and finally my template for form:最后是我的表单模板:

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

This is traceback I get when I try to search:这是我尝试搜索时得到的回溯:

[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

SupplierAutoComplete部分,您按名称过滤,这不是供应商模型的属性,您应该按supp_name过滤。

supp_name__istartswith=self.q

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM