forked from rc/aircox
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.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 %}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user