0

So I am trying to use autocomplete-light 3.1.8 and following this tutorial. Now I have a model called "Equipment" with a many-to-many field "used_for_tests". Following the tutorial, I set the following code up but had this no reverse match error. This happens when I tried to add a new equipment

in models.py:

class Equipment(models.Model):
    asset_number = models.CharField(max_length = 200, null=True, unique = True)
    used_for_test = models.ManyToManyField(Tests)


class EquipmentForm(ModelForm):
    helper = FormHelper()
    helper.layout = Layout(
        Div(
            Div('asset_number',
                css_class='col-sm-4'),
            Div(
                'used_for_test',
           ButtonHolder(

    Submit('save', 'Save')
), css_class='col-sm-4'),  
        css_class='row-fluid'), 
    )
    class Meta:
            model = Equipment
            fields = ['asset_number', 'used_for_test']
            widgets = {'used_for_test': autocomplete.ModelSelect2Multiple(url='tests')
    }
)

urls.py:

url(
    r'^tests-autocomplete/$',
    TestsAutocomplete.as_view(),
    name='tests',
),

views.py:

class TestsAutocomplete(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 Tests.objects.none()

        qs = Tests.objects.all()

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

        return qs

equipment_add.html:

{% extends 'calbase/default.html' %}
{% load staticfiles %}
{% load crispy_forms_tags %} 


{% block content %}
 <div class="container-fluid">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
            <li><a href="/calbase">Overview <span class="sr-only">(current)</span></a></li>
            <li class="active"><a href="{% url 'calbase:default_new' %}" >New</a></li>

          </ul>
        </div>

<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
    <h1>Edit</h1>
    {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

    {% include "calbase/messages_display.html" %}
<div class="row">
                <!-- /.col-lg-8 -->
    <div class="col-xs-12 col-sm-6 col-md-8">
            <div class="panel panel-primary">
                    <div class="panel-heading">
                            Equipment Detail  
                    </div>
                    <div class="panel-body">
                        <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
                {% crispy form %}
                    </form>
                        </div>
                </div>
<!-- <input type='submit' class='btn btn-default'  /> -->




                    </div>
                </div>
            </div>







 </div>
{% endblock %}

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/calbase/equipment/new/

Django Version: 1.10
Python Version: 3.5.2
Installed Applications:
['calbase.apps.CalbaseConfig',
 'dal',
 'dal_select2',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'haystack',
 'whoosh',
 'carton',
 'adminplus',
 'django.contrib.admin.apps.SimpleAdminConfig',
 'crispy_forms',
 'auditlog']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'auditlog.middleware.AuditlogMiddleware']


Template error:
In template C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\templates\bootstrap3\field.html, error at line 28
   Reverse for 'tests' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []   18 : 
   19 :         {% if field|is_checkboxselectmultiple %}
   20 :             {% include 'bootstrap3/layout/checkboxselectmultiple.html' %}
   21 :         {% endif %}
   22 : 
   23 :         {% if field|is_radioselect %}
   24 :             {% include 'bootstrap3/layout/radioselect.html' %}
   25 :         {% endif %}
   26 : 
   27 :         {% if not field|is_checkboxselectmultiple and not field|is_radioselect %}
   28 :              {% if field|is_checkbox and form_show_labels %} 
   29 :                 <label for="{{ field.id_for_label }}" class="{% if field.field.required %} requiredField{% endif %}">
   30 :                     {% crispy_field field %}
   31 :                     {{ field.label|safe }}
   32 :                     {% include 'bootstrap3/layout/help_text_and_errors.html' %}
   33 :                 </label>
   34 :             {% else %}
   35 :                 <div class="controls {{ field_class }}">
   36 :                     {% crispy_field field %}
   37 :                     {% include 'bootstrap3/layout/help_text_and_errors.html' %}
   38 :                 </div>

Traceback:

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\exception.py" in inner
  39.             response = get_response(request)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "C:\Users\hansong.li\Documents\GitHub\equipCal\calbase\views.py" in default_new
  103.     return render(request, 'calbase/default_add.html', {'form':form})

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\shortcuts.py" in render
  30.     content = loader.render_to_string(template_name, context, request, using=using)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\loader.py" in render_to_string
  68.     return template.render(context, request)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\backends\django.py" in render
  66.             return self.template.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  208.                     return self._render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in _render
  199.         return self.nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  994.                 bit = node.render_annotated(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated
  961.             return self.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\loader_tags.py" in render
  174.         return compiled_parent._render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in _render
  199.         return self.nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  994.                 bit = node.render_annotated(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated
  961.             return self.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\loader_tags.py" in render
  70.                 result = block.nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  994.                 bit = node.render_annotated(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated
  961.             return self.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\templatetags\crispy_forms_tags.py" in render
  214.         c = self.get_render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\templatetags\crispy_forms_tags.py" in get_render
  133.                 actual_form.form_html = helper.render_layout(actual_form, node_context, template_pack=self.template_pack)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\helper.py" in render_layout
  297.             template_pack=template_pack

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in render
  138.         return self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in get_rendered_fields
  102.             for field in self.fields

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in <genexpr>
  102.             for field in self.fields

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\utils.py" in render_field
  73.                 form, form_style, context, template_pack=template_pack,

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in render
  358.         fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in get_rendered_fields
  102.             for field in self.fields

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in <genexpr>
  102.             for field in self.fields

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\utils.py" in render_field
  73.                 form, form_style, context, template_pack=template_pack,

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in render
  358.         fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in get_rendered_fields
  102.             for field in self.fields

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\layout.py" in <genexpr>
  102.             for field in self.fields

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\crispy_forms\utils.py" in render_field
  162.             html = template.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\backends\django.py" in render
  66.             return self.template.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  208.                     return self._render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in _render
  199.         return self.nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  994.                 bit = node.render_annotated(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated
  961.             return self.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\defaulttags.py" in render
  323.                 return nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  994.                 bit = node.render_annotated(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated
  961.             return self.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\defaulttags.py" in render
  323.                 return nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  994.                 bit = node.render_annotated(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render_annotated
  961.             return self.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\defaulttags.py" in render
  323.                 return nodelist.render(context)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\template\base.py" in render
  997.             bits.append(force_text(bit))

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\encoding.py" in force_text
  76.                     s = six.text_type(s)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\html.py" in <lambda>
  391.         klass.__str__ = lambda self: mark_safe(klass_str(self))

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\boundfield.py" in __str__
  43.         return self.as_widget()

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\boundfield.py" in as_widget
  101.         return force_text(widget.render(name, self.value(), attrs=attrs))

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\forms\widgets.py" in render
  598.         final_attrs = self.build_attrs(attrs, name=name)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\dal\widgets.py" in build_attrs
  42.         if self.url is not None:

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\dal\widgets.py" in _get_url
  91.         return reverse(self._url)

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\urls\base.py" in reverse
  91.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

File "C:\Users\hansong.li\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
  389.             (lookup_view_s, args, kwargs, len(patterns), patterns)

Exception Type: NoReverseMatch at /calbase/equipment/new/
Exception Value: Reverse for 'tests' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

But as showed here, in models it points to "tests" and that's right the name I gave in urls. Why there is a no reverse match problem?

Also, the "Using autocompletes outside the admin" part in the tutorial is confusing.

{% block footer %}
<script type="text/javascript" src="/static/collected/admin/js/vendor/jquery/jquery.js"></script>

{{ form.media }}

what are those for?

Thanks guys

Hansong Li
  • 417
  • 2
  • 11
  • 26

0 Answers0