update theming for admin (tmp)
This commit is contained in:
		@ -4,7 +4,7 @@ from django.contrib     import admin
 | 
			
		||||
from django.forms       import Textarea
 | 
			
		||||
from django.db          import models
 | 
			
		||||
 | 
			
		||||
import autocomplete_light as al
 | 
			
		||||
# import autocomplete_light as al
 | 
			
		||||
 | 
			
		||||
from programs.models    import *
 | 
			
		||||
 | 
			
		||||
@ -52,19 +52,7 @@ class MetadataAdmin (admin.ModelAdmin):
 | 
			
		||||
        obj.save()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PublicationAdmin (MetadataAdmin):
 | 
			
		||||
    form = al.modelform_factory(
 | 
			
		||||
               Episode
 | 
			
		||||
             , fields = '__all__'
 | 
			
		||||
             # , autocomplete_fields = ['tracks']
 | 
			
		||||
             )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    formfield_overrides = {
 | 
			
		||||
        models.TextField: {'widget': Textarea(attrs={'style':'width:calc(100% - 12px);'})},
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fieldsets = copy.deepcopy(MetadataAdmin.fieldsets)
 | 
			
		||||
 | 
			
		||||
    list_display = ('id', 'title', 'date', 'private')
 | 
			
		||||
@ -100,8 +88,6 @@ class ProgramAdmin (PublicationAdmin):
 | 
			
		||||
    fieldsets[1][1]['fields'] += ['email', 'url']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EpisodeAdmin (PublicationAdmin):
 | 
			
		||||
    fieldsets = copy.deepcopy(PublicationAdmin.fieldsets)
 | 
			
		||||
    #inlines             = [ SoundInline ]
 | 
			
		||||
@ -111,7 +97,10 @@ class EpisodeAdmin (PublicationAdmin):
 | 
			
		||||
    fieldsets[0][1]['fields'] += ['tracks']
 | 
			
		||||
    fieldsets[0][1]['fields'] += ['sounds']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    raw_id_fields = ('tracks', 'sounds')
 | 
			
		||||
    autocomplete_lookup_fields = {
 | 
			
		||||
        'm2m': ['tracks', 'sounds'],
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
admin.site.register(Track)
 | 
			
		||||
admin.site.register(Sound, SoundAdmin)
 | 
			
		||||
 | 
			
		||||
@ -1,40 +0,0 @@
 | 
			
		||||
import autocomplete_light.shortcuts as al
 | 
			
		||||
from programs.models import *
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SoundAutocomplete(al.AutocompleteModelBase):
 | 
			
		||||
    search_fields = ['title', 'file']
 | 
			
		||||
    model = Sound
 | 
			
		||||
 | 
			
		||||
al.register(SoundAutocomplete)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TrackAutocomplete(al.AutocompleteModelBase):
 | 
			
		||||
    search_fields = ['artist', 'title']
 | 
			
		||||
    model = Track
 | 
			
		||||
 | 
			
		||||
al.register(TrackAutocomplete)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ArticleAutocomplete(al.AutocompleteModelBase):
 | 
			
		||||
    search_fields = ['title', 'subtitle']
 | 
			
		||||
    model = Article
 | 
			
		||||
 | 
			
		||||
al.register(ArticleAutocomplete)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProgramAutocomplete(al.AutocompleteModelBase):
 | 
			
		||||
    search_fields = ['title', 'subtitle']
 | 
			
		||||
    model = Program
 | 
			
		||||
 | 
			
		||||
al.register(ProgramAutocomplete)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class EpisodeAutocomplete(al.AutocompleteModelBase):
 | 
			
		||||
    search_fields = ['title', 'subtitle']
 | 
			
		||||
    model = Episode
 | 
			
		||||
 | 
			
		||||
al.register(EpisodeAutocomplete)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,6 @@ from django.utils.html                      import strip_tags
 | 
			
		||||
 | 
			
		||||
# extensions
 | 
			
		||||
from taggit.managers                        import TaggableManager
 | 
			
		||||
from sortedm2m.fields                       import SortedManyToManyField
 | 
			
		||||
 | 
			
		||||
import programs.settings                    as settings
 | 
			
		||||
 | 
			
		||||
@ -113,12 +112,6 @@ class Metadata (Model):
 | 
			
		||||
                    , default = False
 | 
			
		||||
                    , help_text = _('publication is private')
 | 
			
		||||
                  )
 | 
			
		||||
    # FIXME: add a field to specify if the element should be listed or not
 | 
			
		||||
    meta        = models.TextField(
 | 
			
		||||
                      _('meta')
 | 
			
		||||
                    , blank = True
 | 
			
		||||
                    , null = True
 | 
			
		||||
                  )
 | 
			
		||||
    tags        = TaggableManager(
 | 
			
		||||
                      _('tags')
 | 
			
		||||
                    , blank = True
 | 
			
		||||
@ -234,8 +227,13 @@ class Track (Model):
 | 
			
		||||
    tags        = TaggableManager( blank = True )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def autocomplete_search_fields():
 | 
			
		||||
        return ("artist__icontains", 'title__icontains')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return ' '.join([self.title, _('by'), self.artist,
 | 
			
		||||
        return ' '.join([self.artist, ':', self.title,
 | 
			
		||||
                (self.version and ('(' + self.version + ')') or '') ])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -313,8 +311,13 @@ class Sound (Metadata):
 | 
			
		||||
        super(Sound, self).save(*args, **kwargs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def autocomplete_search_fields():
 | 
			
		||||
        return ("id__iexact", "path__icontains", 'title__icontains')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def __str__ (self):
 | 
			
		||||
        return str(self.id) + ': ' + self.path
 | 
			
		||||
        return '/'.join(self.path.split('/')[-3:])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    class Meta:
 | 
			
		||||
@ -564,7 +567,6 @@ class Program (Publication):
 | 
			
		||||
        verbose_name_plural = _('Programs')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Episode (Publication):
 | 
			
		||||
    # Note:
 | 
			
		||||
    #   We do not especially need a duration here, because even if an
 | 
			
		||||
@ -579,12 +581,12 @@ class Episode (Publication):
 | 
			
		||||
                    , verbose_name = _('parent')
 | 
			
		||||
                    , help_text = _('parent program')
 | 
			
		||||
                  )
 | 
			
		||||
    tracks      = SortedManyToManyField(
 | 
			
		||||
    tracks      = models.ManyToManyField(
 | 
			
		||||
                      Track
 | 
			
		||||
                    , blank = True
 | 
			
		||||
                    , verbose_name = _('tracks')
 | 
			
		||||
                  )
 | 
			
		||||
    sounds      = SortedManyToManyField(
 | 
			
		||||
    sounds      = models.ManyToManyField(
 | 
			
		||||
                      Sound
 | 
			
		||||
                    , blank = True
 | 
			
		||||
                    , verbose_name = _('sounds')
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,25 @@
 | 
			
		||||
{% extends "admin/base.html" %}
 | 
			
		||||
 | 
			
		||||
{% block extrahead %}
 | 
			
		||||
    <!-- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.js" type="text/javascript"></script> -->
 | 
			
		||||
    {% include 'autocomplete_light/static.html' %}
 | 
			
		||||
<style>
 | 
			
		||||
 | 
			
		||||
.grp-autocomplete-wrapper-m2m:focus, .grp-autocomplete-wrapper-m2m.grp-state-focus,
 | 
			
		||||
.grp-autocomplete-wrapper-m2m {
 | 
			
		||||
  background: rgba(255, 255, 255, 0.2);
 | 
			
		||||
  border: none;
 | 
			
		||||
  box-shadow: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.grp-autocomplete-wrapper-m2m ul.grp-repr li.grp-search {
 | 
			
		||||
  background-color: #FDFDFD;
 | 
			
		||||
  border: 1px solid #CCC;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.grp-autocomplete-wrapper-m2m ul.grp-repr li {
 | 
			
		||||
  float: none;
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user