'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'ajax_select',
'jquery',
'tinymce',
'quotes',
'plugins': 'table',
'valid_elements': 'a[href],b,strong,u,i,em,ul,ol,li,p,br'
}
+
+# If jQuery or jQuery.ui are not already loaded on the page, then
+# these will be loaded from CDN.
+# If you want to prevent this and load your own then set AJAX_SELECT_BOOTSTRAP
+
+AJAX_SELECT_BOOTSTRAP = False
import quotes.views
+admin.autodiscover()
+
urlpatterns = [
url(r'^cntrl/', include(admin.site.urls)),
url(r'^tinymce/', include('tinymce.urls')),
+ url(r'^ajax_select/', include('ajax_select.urls')),
url(r'^quotes/', include('quotes.urls', namespace='quotes')),
url(r'^$', RedirectView.as_view(url='/quotes/', permanent=True)),
from django.contrib import admin
+from ajax_select.fields import AutoCompleteSelectField
+from ajax_select.admin import AjaxSelectAdmin
+from ajax_select import make_ajax_form
# Register your models here.
from .models import AuthorTag, WorkTag, QuoteTag, Author, Work, Quote
@admin.register(Author)
-class AuthorAdmin(admin.ModelAdmin):
+class AuthorAdmin(AjaxSelectAdmin):
fields = ('name', 'birth_date', 'death_date',
'tags', 'notes', 'pvt_notes',
'creation_date', 'last_modification', 'nb_display')
readonly_fields = ('creation_date', 'last_modification', 'nb_display')
+ form = make_ajax_form(Author, {
+ 'tags': 'AuthorTag',
+ })
+
@admin.register(Work)
-class WorkAdmin(admin.ModelAdmin):
+class WorkAdmin(AjaxSelectAdmin):
fields = ('name', 'author', 'date',
'tags', 'notes', 'pvt_notes',
'creation_date', 'last_modification', 'nb_display')
readonly_fields = ('creation_date', 'last_modification', 'nb_display')
+ form = make_ajax_form(Work, {
+ 'author': 'author',
+ 'tags': 'WorkTag',
+ })
+
@admin.register(Quote)
-class QuoteAdmin(admin.ModelAdmin):
+class QuoteAdmin(AjaxSelectAdmin):
fields = ('text', 'work',
'tags', 'notes', 'pvt_notes',
'creation_date', 'last_modification', 'nb_display')
readonly_fields = ('creation_date', 'last_modification', 'nb_display')
+ form = make_ajax_form(Quote, {
+ 'work': 'work',
+ 'tags': 'QuoteTag',
+ })
+# work = AutoCompleteSelectField('work')
+
admin.site.register(AuthorTag)
admin.site.register(WorkTag)
admin.site.register(QuoteTag)
--- /dev/null
+from django.db.models import Q
+
+from ajax_select import register, LookupChannel
+from .models import Work, Author, QuoteTag, AuthorTag, WorkTag
+
+@register('work')
+class WorkLookup(LookupChannel):
+ model = Work
+
+ def get_query(self, q, request):
+ return self.model.objects.filter(
+ Q(name__icontains=q) | Q(author__name__icontains=q)
+ ).order_by('name')[:10]
+
+ def format_item_display(self, item):
+ return str(item)
+
+@register('author')
+class AuthorLookup(LookupChannel):
+ model = Author
+
+ def get_query(self, q, request):
+ return self.model.objects.filter(
+ name__icontains=q
+ ).order_by('name')[:10]
+
+ def format_item_display(self, item):
+ return str(item)
+
+def taglookup(tagclass):
+ @register(tagclass.__name__)
+ class Lookup(LookupChannel):
+ model = tagclass
+
+ def get_query(self, q, request):
+ return self.model.objects.filter(
+ tag__icontains=q
+ ).order_by('tag')[:10]
+
+ def format_item_display(self, item):
+ return str(item)
+
+taglookup(QuoteTag)
+taglookup(WorkTag)
+taglookup(AuthorTag)
help_text='Not implemented yet')
def __unicode__(self):
- return "%s: %s (%s)" % (self.author.name, self.name, self.date)
+ return "%s (%s)" % (self.name, self.author.name)
def get_absolute_url(self):
return reverse('quotes:work', args=[str(self.id)])
class Meta(CommonData.Meta):
ordering = ['-pk']
-