Update and finish admin autocompletes
This commit is contained in:
parent
6bdb55ab98
commit
09a11bdcea
2 changed files with 101 additions and 21 deletions
|
@ -29,7 +29,7 @@ admin.site.register(Skola, SkolaAdmin)
|
||||||
### Resitel
|
### Resitel
|
||||||
|
|
||||||
class ResitelAdmin(reversion.VersionAdmin):
|
class ResitelAdmin(reversion.VersionAdmin):
|
||||||
form = autocomplete_light.modelform_factory(Resitel)
|
form = autocomplete_light.modelform_factory(Resitel, autocomplete_fields=['skola'], fields=['skola'])
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['jmeno', 'prijmeni', 'user']}),
|
(None, {'fields': ['jmeno', 'prijmeni', 'user']}),
|
||||||
(u'Škola', {'fields': ['skola', 'rok_maturity']}),
|
(u'Škola', {'fields': ['skola', 'rok_maturity']}),
|
||||||
|
@ -59,6 +59,8 @@ admin.site.register(Cislo, CisloAdmin)
|
||||||
|
|
||||||
class CisloInline(admin.StackedInline):
|
class CisloInline(admin.StackedInline):
|
||||||
model = Cislo
|
model = Cislo
|
||||||
|
fields = ['cislo', 'datum_vydani', 'datum_deadline', 'verejne']
|
||||||
|
readonly_fields = ['cislo']
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,7 +80,7 @@ admin.site.register(Rocnik, RocnikAdmin)
|
||||||
### PrilohaReseni
|
### PrilohaReseni
|
||||||
|
|
||||||
class PrilohaReseniAdmin(reversion.VersionAdmin):
|
class PrilohaReseniAdmin(reversion.VersionAdmin):
|
||||||
readonly_fields = ['timestamp']
|
readonly_fields = ['timestamp', 'reseni']
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['reseni', 'soubor', 'timestamp']}),
|
(None, {'fields': ['reseni', 'soubor', 'timestamp']}),
|
||||||
(u'Poznámky', {'fields': ['poznamka']}),
|
(u'Poznámky', {'fields': ['poznamka']}),
|
||||||
|
@ -91,17 +93,20 @@ admin.site.register(PrilohaReseni, PrilohaReseniAdmin)
|
||||||
|
|
||||||
class PrilohaReseniInline(admin.StackedInline):
|
class PrilohaReseniInline(admin.StackedInline):
|
||||||
model = PrilohaReseni
|
model = PrilohaReseni
|
||||||
|
fields = ['timestamp', 'soubor', 'poznamka']
|
||||||
|
readonly_fields = ['timestamp']
|
||||||
extra = 1
|
extra = 1
|
||||||
|
|
||||||
|
|
||||||
### Reseni
|
### Reseni
|
||||||
|
|
||||||
class ReseniAdmin(reversion.VersionAdmin):
|
class ReseniAdmin(reversion.VersionAdmin):
|
||||||
readonly_fields = ['timestamp']
|
form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['problem'], fields=['problem'])
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['problem', 'resitel', 'forma', 'body', 'cislo_body', 'timestamp']}),
|
(None, {'fields': ['problem', 'resitel', 'forma', 'body', 'cislo_body', 'timestamp']}),
|
||||||
(u'Poznámky', {'fields': ['poznamka']}),
|
(u'Poznámky', {'fields': ['poznamka']}),
|
||||||
]
|
]
|
||||||
|
readonly_fields = ['timestamp']
|
||||||
list_display = ['problem', 'resitel', 'forma', 'body', 'timestamp']
|
list_display = ['problem', 'resitel', 'forma', 'body', 'timestamp']
|
||||||
list_filter = ['body', 'timestamp', 'forma']
|
list_filter = ['body', 'timestamp', 'forma']
|
||||||
search_fields = []
|
search_fields = []
|
||||||
|
@ -111,12 +116,14 @@ admin.site.register(Reseni, ReseniAdmin)
|
||||||
|
|
||||||
class ReseniInline(admin.TabularInline):
|
class ReseniInline(admin.TabularInline):
|
||||||
model = Reseni
|
model = Reseni
|
||||||
readonly_fields = ['poznamka']
|
fields = ['resitel', 'forma', 'body', 'cislo_body', 'timestamp', 'poznamka']
|
||||||
|
readonly_fields = ['poznamka', 'resitel', 'timestamp', 'cislo_body', 'resitel', 'forma']
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
### Problem
|
### Problem
|
||||||
|
|
||||||
|
#TODO: Autocomplete autor/opravovatel
|
||||||
class ProblemAdminForm(forms.ModelForm):
|
class ProblemAdminForm(forms.ModelForm):
|
||||||
text_problemu = forms.CharField(widget=CKEditorWidget())
|
text_problemu = forms.CharField(widget=CKEditorWidget())
|
||||||
text_problemu_org = forms.CharField(widget=CKEditorWidget())
|
text_problemu_org = forms.CharField(widget=CKEditorWidget())
|
||||||
|
@ -126,15 +133,15 @@ class ProblemAdminForm(forms.ModelForm):
|
||||||
|
|
||||||
class ProblemAdmin(reversion.VersionAdmin):
|
class ProblemAdmin(reversion.VersionAdmin):
|
||||||
form = ProblemAdminForm
|
form = ProblemAdminForm
|
||||||
# readonly_fields = ['autor']
|
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
(None, {'fields': ['nazev', 'typ', 'stav', 'autor', 'body']}),
|
(None, {'fields': ['nazev', 'typ', 'stav', 'autor', 'zamereni', 'body', 'timestamp']}),
|
||||||
(u'Vydání', {'fields': ['cislo_zadani', 'kod', 'cislo_reseni', 'opravovatel']}),
|
(u'Vydání', {'fields': ['cislo_zadani', 'kod', 'cislo_reseni', 'opravovatel']}),
|
||||||
(u'Texty', {'fields': ['text_problemu', 'text_problemu_org']}),
|
(u'Texty', {'fields': ['text_problemu', 'text_problemu_org']}),
|
||||||
]
|
]
|
||||||
|
readonly_fields = ['timestamp']
|
||||||
list_display = ['nazev', 'typ', 'kod', 'stav', 'autor', 'opravovatel', 'verejne', 'cislo_zadani']
|
list_display = ['nazev', 'typ', 'kod', 'stav', 'autor', 'opravovatel', 'verejne', 'cislo_zadani']
|
||||||
list_select_related = True
|
list_select_related = True
|
||||||
list_filter = ['typ', 'stav', 'autor', 'opravovatel']
|
list_filter = ['typ', 'stav', 'timestamp']
|
||||||
search_fields = ['nazev', 'kod', 'text_problemu_org', 'text_problemu']
|
search_fields = ['nazev', 'kod', 'text_problemu_org', 'text_problemu']
|
||||||
inlines = [ReseniInline]
|
inlines = [ReseniInline]
|
||||||
view_on_site = Problem.verejne_url
|
view_on_site = Problem.verejne_url
|
||||||
|
@ -152,5 +159,6 @@ class SoustredeniAdmin(reversion.VersionAdmin):
|
||||||
list_display = ['rocnik', 'misto', 'datum_zacatku', 'verejne']
|
list_display = ['rocnik', 'misto', 'datum_zacatku', 'verejne']
|
||||||
list_filter = ['rocnik']
|
list_filter = ['rocnik']
|
||||||
view_on_site = Soustredeni.verejne_url
|
view_on_site = Soustredeni.verejne_url
|
||||||
|
# TODO: UcastNaSoustredeni jako inline
|
||||||
|
|
||||||
admin.site.register(Soustredeni, SoustredeniAdmin)
|
admin.site.register(Soustredeni, SoustredeniAdmin)
|
||||||
|
|
|
@ -1,24 +1,96 @@
|
||||||
import autocomplete_light
|
# -*- coding: utf-8 -*-
|
||||||
from models import Skola
|
|
||||||
|
import autocomplete_light
|
||||||
|
|
||||||
|
from models import Skola, Resitel, Problem
|
||||||
|
|
||||||
|
|
||||||
|
class SkolaAutocomplete(autocomplete_light.AutocompleteModelBase):
|
||||||
|
|
||||||
|
model = Skola
|
||||||
|
|
||||||
|
search_fields=['nazev', 'mesto', 'ulice']
|
||||||
|
|
||||||
|
split_words = True
|
||||||
|
|
||||||
|
limit_choices = 15
|
||||||
|
|
||||||
# This will generate a PersonAutocomplete class
|
|
||||||
autocomplete_light.register(Skola,
|
|
||||||
# Just like in ModelAdmin.search_fields
|
|
||||||
search_fields=['nazev', 'mesto', 'ulice'],
|
|
||||||
attrs={
|
attrs={
|
||||||
# This will set the input placeholder attribute:
|
# This will set the input placeholder attribute:
|
||||||
'placeholder': 'Skola',
|
'placeholder': u'Škola',
|
||||||
# This will set the yourlabs.Autocomplete.minimumCharacters
|
# This will set the yourlabs.Autocomplete.minimumCharacters
|
||||||
# options, the naming conversion is handled by jQuery
|
# options, the naming conversion is handled by jQuery
|
||||||
'data-autocomplete-minimum-characters': 1,
|
'data-autocomplete-minimum-characters': 1,
|
||||||
},
|
}
|
||||||
# This will set the data-widget-maximum-values attribute on the
|
|
||||||
# widget container element, and will be set to
|
widget_attrs={
|
||||||
# yourlabs.Widget.maximumValues (jQuery handles the naming
|
'data-widget-maximum-values': 15,
|
||||||
# conversion).
|
'class': 'modern-style',
|
||||||
|
}
|
||||||
|
|
||||||
|
autocomplete_light.register(SkolaAutocomplete)
|
||||||
|
|
||||||
|
|
||||||
|
class ResitelAutocomplete(autocomplete_light.AutocompleteModelBase):
|
||||||
|
|
||||||
|
model = Resitel
|
||||||
|
|
||||||
|
search_fields=['jmeno', 'prijmeni']
|
||||||
|
|
||||||
|
split_words = False
|
||||||
|
|
||||||
|
limit_choices = 15
|
||||||
|
|
||||||
|
def choice_label(self, resitel):
|
||||||
|
return u"%s, %s (%s)" % (resitel.plne_jmeno(), resitel.mesto, resitel.rok_maturity)
|
||||||
|
|
||||||
|
attrs={
|
||||||
|
# This will set the input placeholder attribute:
|
||||||
|
'placeholder': u'Řešitel',
|
||||||
|
# This will set the yourlabs.Autocomplete.minimumCharacters
|
||||||
|
# options, the naming conversion is handled by jQuery
|
||||||
|
'data-autocomplete-minimum-characters': 1,
|
||||||
|
}
|
||||||
|
|
||||||
widget_attrs={
|
widget_attrs={
|
||||||
'data-widget-maximum-values': 15,
|
'data-widget-maximum-values': 15,
|
||||||
# Enable modern-style widget !
|
# Enable modern-style widget !
|
||||||
'class': 'modern-style',
|
'class': 'modern-style',
|
||||||
},
|
}
|
||||||
)
|
|
||||||
|
autocomplete_light.register(ResitelAutocomplete)
|
||||||
|
|
||||||
|
|
||||||
|
class ProblemAutocomplete(autocomplete_light.AutocompleteModelBase):
|
||||||
|
|
||||||
|
model = Problem
|
||||||
|
|
||||||
|
search_fields=['nazev']
|
||||||
|
|
||||||
|
split_words = False
|
||||||
|
|
||||||
|
limit_choices = 10
|
||||||
|
|
||||||
|
def choice_label(self, p):
|
||||||
|
if p.stav == Problem.STAV_ZADANY:
|
||||||
|
return u"%s (%s, %s.%s)" % (p.nazev, p.typ, p.cislo_zadani.rocnik.rocnik, p.kod_v_rocniku())
|
||||||
|
else:
|
||||||
|
return u"%s (%s, %s)" % (p.nazev, p.typ, p.stav)
|
||||||
|
|
||||||
|
attrs={
|
||||||
|
# This will set the input placeholder attribute:
|
||||||
|
'placeholder': u'Řešitel',
|
||||||
|
# This will set the yourlabs.Autocomplete.minimumCharacters
|
||||||
|
# options, the naming conversion is handled by jQuery
|
||||||
|
'data-autocomplete-minimum-characters': 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
widget_attrs={
|
||||||
|
'data-widget-maximum-values': 10,
|
||||||
|
# Enable modern-style widget !
|
||||||
|
'class': 'modern-style',
|
||||||
|
}
|
||||||
|
|
||||||
|
autocomplete_light.register(ProblemAutocomplete)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue