update theming for admin (tmp)
This commit is contained in:
parent
2ebf4a416d
commit
b36c2f944e
|
@ -4,7 +4,7 @@ from django.contrib import admin
|
||||||
from django.forms import Textarea
|
from django.forms import Textarea
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
import autocomplete_light as al
|
# import autocomplete_light as al
|
||||||
|
|
||||||
from programs.models import *
|
from programs.models import *
|
||||||
|
|
||||||
|
@ -52,19 +52,7 @@ class MetadataAdmin (admin.ModelAdmin):
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PublicationAdmin (MetadataAdmin):
|
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)
|
fieldsets = copy.deepcopy(MetadataAdmin.fieldsets)
|
||||||
|
|
||||||
list_display = ('id', 'title', 'date', 'private')
|
list_display = ('id', 'title', 'date', 'private')
|
||||||
|
@ -100,8 +88,6 @@ class ProgramAdmin (PublicationAdmin):
|
||||||
fieldsets[1][1]['fields'] += ['email', 'url']
|
fieldsets[1][1]['fields'] += ['email', 'url']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EpisodeAdmin (PublicationAdmin):
|
class EpisodeAdmin (PublicationAdmin):
|
||||||
fieldsets = copy.deepcopy(PublicationAdmin.fieldsets)
|
fieldsets = copy.deepcopy(PublicationAdmin.fieldsets)
|
||||||
#inlines = [ SoundInline ]
|
#inlines = [ SoundInline ]
|
||||||
|
@ -111,7 +97,10 @@ class EpisodeAdmin (PublicationAdmin):
|
||||||
fieldsets[0][1]['fields'] += ['tracks']
|
fieldsets[0][1]['fields'] += ['tracks']
|
||||||
fieldsets[0][1]['fields'] += ['sounds']
|
fieldsets[0][1]['fields'] += ['sounds']
|
||||||
|
|
||||||
|
raw_id_fields = ('tracks', 'sounds')
|
||||||
|
autocomplete_lookup_fields = {
|
||||||
|
'm2m': ['tracks', 'sounds'],
|
||||||
|
}
|
||||||
|
|
||||||
admin.site.register(Track)
|
admin.site.register(Track)
|
||||||
admin.site.register(Sound, SoundAdmin)
|
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
|
# extensions
|
||||||
from taggit.managers import TaggableManager
|
from taggit.managers import TaggableManager
|
||||||
from sortedm2m.fields import SortedManyToManyField
|
|
||||||
|
|
||||||
import programs.settings as settings
|
import programs.settings as settings
|
||||||
|
|
||||||
|
@ -113,12 +112,6 @@ class Metadata (Model):
|
||||||
, default = False
|
, default = False
|
||||||
, help_text = _('publication is private')
|
, 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 = TaggableManager(
|
||||||
_('tags')
|
_('tags')
|
||||||
, blank = True
|
, blank = True
|
||||||
|
@ -234,8 +227,13 @@ class Track (Model):
|
||||||
tags = TaggableManager( blank = True )
|
tags = TaggableManager( blank = True )
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def autocomplete_search_fields():
|
||||||
|
return ("artist__icontains", 'title__icontains')
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return ' '.join([self.title, _('by'), self.artist,
|
return ' '.join([self.artist, ':', self.title,
|
||||||
(self.version and ('(' + self.version + ')') or '') ])
|
(self.version and ('(' + self.version + ')') or '') ])
|
||||||
|
|
||||||
|
|
||||||
|
@ -313,8 +311,13 @@ class Sound (Metadata):
|
||||||
super(Sound, self).save(*args, **kwargs)
|
super(Sound, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def autocomplete_search_fields():
|
||||||
|
return ("id__iexact", "path__icontains", 'title__icontains')
|
||||||
|
|
||||||
|
|
||||||
def __str__ (self):
|
def __str__ (self):
|
||||||
return str(self.id) + ': ' + self.path
|
return '/'.join(self.path.split('/')[-3:])
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -564,7 +567,6 @@ class Program (Publication):
|
||||||
verbose_name_plural = _('Programs')
|
verbose_name_plural = _('Programs')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Episode (Publication):
|
class Episode (Publication):
|
||||||
# Note:
|
# Note:
|
||||||
# We do not especially need a duration here, because even if an
|
# We do not especially need a duration here, because even if an
|
||||||
|
@ -579,12 +581,12 @@ class Episode (Publication):
|
||||||
, verbose_name = _('parent')
|
, verbose_name = _('parent')
|
||||||
, help_text = _('parent program')
|
, help_text = _('parent program')
|
||||||
)
|
)
|
||||||
tracks = SortedManyToManyField(
|
tracks = models.ManyToManyField(
|
||||||
Track
|
Track
|
||||||
, blank = True
|
, blank = True
|
||||||
, verbose_name = _('tracks')
|
, verbose_name = _('tracks')
|
||||||
)
|
)
|
||||||
sounds = SortedManyToManyField(
|
sounds = models.ManyToManyField(
|
||||||
Sound
|
Sound
|
||||||
, blank = True
|
, blank = True
|
||||||
, verbose_name = _('sounds')
|
, verbose_name = _('sounds')
|
||||||
|
|
|
@ -1,7 +1,25 @@
|
||||||
{% extends "admin/base.html" %}
|
{% extends "admin/base.html" %}
|
||||||
|
|
||||||
{% block extrahead %}
|
{% block extrahead %}
|
||||||
<!-- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.js" type="text/javascript"></script> -->
|
<style>
|
||||||
{% include 'autocomplete_light/static.html' %}
|
|
||||||
|
.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 %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user