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 | ||||
| 
 | ||||
| class ResitelAdmin(reversion.VersionAdmin): | ||||
|     form = autocomplete_light.modelform_factory(Resitel) | ||||
|     form = autocomplete_light.modelform_factory(Resitel, autocomplete_fields=['skola'], fields=['skola']) | ||||
|     fieldsets = [ | ||||
|         (None,              {'fields': ['jmeno', 'prijmeni', 'user']}), | ||||
|         (u'Škola',          {'fields': ['skola', 'rok_maturity']}), | ||||
|  | @ -59,6 +59,8 @@ admin.site.register(Cislo, CisloAdmin) | |||
| 
 | ||||
| class CisloInline(admin.StackedInline): | ||||
|     model = Cislo | ||||
|     fields = ['cislo', 'datum_vydani', 'datum_deadline', 'verejne'] | ||||
|     readonly_fields = ['cislo'] | ||||
|     extra = 0 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -78,7 +80,7 @@ admin.site.register(Rocnik, RocnikAdmin) | |||
| ### PrilohaReseni | ||||
| 
 | ||||
| class PrilohaReseniAdmin(reversion.VersionAdmin): | ||||
|     readonly_fields = ['timestamp'] | ||||
|     readonly_fields = ['timestamp', 'reseni'] | ||||
|     fieldsets = [ | ||||
|         (None,              {'fields': ['reseni', 'soubor', 'timestamp']}), | ||||
|         (u'Poznámky',       {'fields': ['poznamka']}), | ||||
|  | @ -91,17 +93,20 @@ admin.site.register(PrilohaReseni, PrilohaReseniAdmin) | |||
| 
 | ||||
| class PrilohaReseniInline(admin.StackedInline): | ||||
|     model = PrilohaReseni | ||||
|     fields = ['timestamp', 'soubor', 'poznamka'] | ||||
|     readonly_fields = ['timestamp'] | ||||
|     extra = 1 | ||||
| 
 | ||||
| 
 | ||||
| ### Reseni | ||||
| 
 | ||||
| class ReseniAdmin(reversion.VersionAdmin): | ||||
|     readonly_fields = ['timestamp'] | ||||
|     form = autocomplete_light.modelform_factory(Reseni, autocomplete_fields=['problem'], fields=['problem']) | ||||
|     fieldsets = [ | ||||
|         (None,              {'fields': ['problem', 'resitel', 'forma', 'body', 'cislo_body', 'timestamp']}), | ||||
|         (u'Poznámky',       {'fields': ['poznamka']}), | ||||
|         ] | ||||
|     readonly_fields = ['timestamp'] | ||||
|     list_display = ['problem', 'resitel', 'forma', 'body', 'timestamp'] | ||||
|     list_filter = ['body', 'timestamp', 'forma'] | ||||
|     search_fields = [] | ||||
|  | @ -111,12 +116,14 @@ admin.site.register(Reseni, ReseniAdmin) | |||
| 
 | ||||
| class ReseniInline(admin.TabularInline): | ||||
|     model = Reseni | ||||
|     readonly_fields = ['poznamka'] | ||||
|     fields = ['resitel', 'forma', 'body', 'cislo_body', 'timestamp', 'poznamka'] | ||||
|     readonly_fields = ['poznamka', 'resitel', 'timestamp', 'cislo_body', 'resitel', 'forma'] | ||||
|     extra = 0 | ||||
| 
 | ||||
| 
 | ||||
| ### Problem | ||||
| 
 | ||||
| #TODO: Autocomplete autor/opravovatel | ||||
| class ProblemAdminForm(forms.ModelForm): | ||||
|     text_problemu = forms.CharField(widget=CKEditorWidget()) | ||||
|     text_problemu_org = forms.CharField(widget=CKEditorWidget()) | ||||
|  | @ -126,15 +133,15 @@ class ProblemAdminForm(forms.ModelForm): | |||
| 
 | ||||
| class ProblemAdmin(reversion.VersionAdmin): | ||||
|     form = ProblemAdminForm | ||||
| #    readonly_fields = ['autor'] | ||||
|     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'Texty',          {'fields': ['text_problemu', 'text_problemu_org']}), | ||||
|         ] | ||||
|     readonly_fields = ['timestamp'] | ||||
|     list_display = ['nazev', 'typ', 'kod', 'stav', 'autor', 'opravovatel', 'verejne', 'cislo_zadani'] | ||||
|     list_select_related = True | ||||
|     list_filter = ['typ', 'stav', 'autor', 'opravovatel'] | ||||
|     list_filter = ['typ', 'stav', 'timestamp'] | ||||
|     search_fields = ['nazev', 'kod', 'text_problemu_org', 'text_problemu'] | ||||
|     inlines = [ReseniInline] | ||||
|     view_on_site = Problem.verejne_url | ||||
|  | @ -152,5 +159,6 @@ class SoustredeniAdmin(reversion.VersionAdmin): | |||
|     list_display = ['rocnik', 'misto', 'datum_zacatku', 'verejne'] | ||||
|     list_filter = ['rocnik'] | ||||
|     view_on_site = Soustredeni.verejne_url | ||||
|     # TODO: UcastNaSoustredeni jako inline | ||||
| 
 | ||||
| admin.site.register(Soustredeni, SoustredeniAdmin) | ||||
|  |  | |||
|  | @ -1,24 +1,96 @@ | |||
| import autocomplete_light | ||||
| from models import Skola | ||||
| # -*- coding: utf-8 -*- | ||||
| 
 | ||||
| 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={ | ||||
|         # This will set the input placeholder attribute: | ||||
|         'placeholder': 'Skola', | ||||
|         'placeholder': u'Škola', | ||||
|         # This will set the yourlabs.Autocomplete.minimumCharacters | ||||
|         # options, the naming conversion is handled by jQuery | ||||
|         'data-autocomplete-minimum-characters': 1, | ||||
|     }, | ||||
|     # This will set the data-widget-maximum-values attribute on the | ||||
|     # widget container element, and will be set to | ||||
|     # yourlabs.Widget.maximumValues (jQuery handles the naming | ||||
|     # conversion). | ||||
|     } | ||||
| 
 | ||||
|     widget_attrs={ | ||||
|         'data-widget-maximum-values': 15, | ||||
|         '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={ | ||||
|         'data-widget-maximum-values': 15, | ||||
|         # Enable modern-style widget ! | ||||
|         '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
	
	 Tomas Gavenciak
						Tomas Gavenciak