I am trying to use django-autocomplete-light 3.2.1 in my Django (1.10) project with python (3.5) and I found great difficulty in using it. Then I try to follow the live demo shown in the tutorial and pull down all file to my local drive for replication (like the one on http://dal-yourlabs.rhcloud.com/select2_outside_admin/), however in vain. To me, I want to make my local demo work so that I can work my own one based on this.
Specifically, when I follow the following codes and run the site, it shows the errors of NoReverseMatch at /select2_outside_admin/
with description of Reverse for 'linked_data' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
I have no idea what is going wrong. I attached my codes as below and please advise what to do if you know the solution. Many thanks:
settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'select2_outside_admin',
# Autocomplete
'dal',
# Enable plugins
'dal_select2',
'dal_queryset_sequence',
]
urls.py:
from django.conf.urls import url, include
from django.contrib import admin
from .views import UpdateView
urlpatterns = [
url(r'^admin/', admin.site.urls),
# url(r'^select2_outside_admin/', include('select2_outside_admin.urls')),
url(
r'^select2_outside_admin/$',
UpdateView.as_view(),
name='select2_outside_admin',
),
]
models.py:
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class TModel(models.Model):
name = models.CharField(max_length=200)
test = models.ForeignKey(
'self',
null=True,
blank=True,
related_name='related_test_models'
)
owner = models.ForeignKey(
'auth.user',
null=True,
blank=True,
related_name='owned_linked_models',
)
for_inline = models.ForeignKey(
'self',
null=True,
blank=True,
related_name='inline_test_models'
)
def __str__(self):
return self.name
forms.py:
from dal import autocomplete
from django import forms
from .models import TModel
class TForm(forms.ModelForm):
def clean_test(self):
owner = self.cleaned_data.get('owner', None)
value = self.cleaned_data.get('test', None)
if value and owner and value.owner != owner:
raise forms.ValidationError('Wrong owner for test')
return value
class Meta:
model = TModel
fields = ('name', 'owner', 'test')
widgets = {
'test': autocomplete.ModelSelect2(url='linked_data',
forward=('owner',))
}
class Media:
js = (
'linked_data.js',
)
views.py:
from django.shortcuts import render
from django.core.urlresolvers import reverse_lazy
from django.views import generic
from select2_outside_admin.forms import TForm
from select2_outside_admin.models import TModel
# Create your views here.
class UpdateView(generic.UpdateView):
model = TModel
form_class = TForm
template_name = 'select2_outside_admin.html'
success_url = reverse_lazy('select2_outside_admin')
def get_object(self):
return TModel.objects.first()