Rozdeleni problemu na navrhy a zadane
This commit is contained in:
parent
e5f95d5bda
commit
234203c570
2 changed files with 43 additions and 6 deletions
|
@ -23,6 +23,19 @@ def field_labels(model, fieldname):
|
||||||
f = [i for i in model._meta.fields if i.name == fieldname][0]
|
f = [i for i in model._meta.fields if i.name == fieldname][0]
|
||||||
return {'label': f.verbose_name.capitalize(), 'help_text': f.help_text, }
|
return {'label': f.verbose_name.capitalize(), 'help_text': f.help_text, }
|
||||||
|
|
||||||
|
def create_modeladmin(modeladmin, model, name = None, verbose_name = None, verbose_name_plural = None):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
proxy = True
|
||||||
|
app_label = model._meta.app_label
|
||||||
|
Meta.verbose_name = verbose_name
|
||||||
|
Meta.verbose_name_plural = verbose_name_plural
|
||||||
|
|
||||||
|
attrs = {'__module__': '', 'Meta': Meta}
|
||||||
|
newmodel = type(name, (model,), attrs)
|
||||||
|
admin.site.register(newmodel, modeladmin)
|
||||||
|
return modeladmin
|
||||||
|
|
||||||
### INLINES
|
### INLINES
|
||||||
|
|
||||||
class ResitelInline(admin.TabularInline):
|
class ResitelInline(admin.TabularInline):
|
||||||
|
@ -231,6 +244,7 @@ admin.site.register(Reseni, ReseniAdmin)
|
||||||
from autocomplete_light.contrib.taggit_field import TaggitField, TaggitWidget
|
from autocomplete_light.contrib.taggit_field import TaggitField, TaggitWidget
|
||||||
|
|
||||||
#TODO: Autocomplete autor/opravovatel
|
#TODO: Autocomplete autor/opravovatel
|
||||||
|
|
||||||
class ProblemAdminForm(forms.ModelForm):
|
class ProblemAdminForm(forms.ModelForm):
|
||||||
text_zadani = forms.CharField(widget=CKEditorWidget(), **field_labels(Problem, 'text_zadani'))
|
text_zadani = forms.CharField(widget=CKEditorWidget(), **field_labels(Problem, 'text_zadani'))
|
||||||
text_reseni = forms.CharField(widget=CKEditorWidget(), **field_labels(Problem, 'text_reseni'))
|
text_reseni = forms.CharField(widget=CKEditorWidget(), **field_labels(Problem, 'text_reseni'))
|
||||||
|
@ -248,22 +262,39 @@ class ProblemAdmin(reversion.VersionAdmin):
|
||||||
(None, {'fields': ['text_zadani', 'text_reseni', 'text_org',]}),
|
(None, {'fields': ['text_zadani', 'text_reseni', 'text_org',]}),
|
||||||
]
|
]
|
||||||
readonly_fields = ['timestamp', 'import_dakos_id']
|
readonly_fields = ['timestamp', 'import_dakos_id']
|
||||||
list_display = ['nazev', 'typ', 'kod', 'stav', 'autor', 'opravovatel', 'verejne', 'cislo_zadani', 'pocet_reseni']
|
|
||||||
list_select_related = True
|
list_select_related = True
|
||||||
list_filter = ['typ', 'stav', 'timestamp']
|
search_fields = ['nazev', 'text_zadani', 'text_reseni', 'text_org']
|
||||||
search_fields = ['nazev', 'kod', 'text_zadani', 'text_reseni', 'text_org']
|
|
||||||
inlines = [ReseniKProblemuInline]
|
|
||||||
view_on_site = Problem.verejne_url
|
view_on_site = Problem.verejne_url
|
||||||
|
|
||||||
def get_queryset(self, request):
|
def get_queryset(self, request):
|
||||||
qs = super(ProblemAdmin, self).get_queryset(request)
|
qs = super(ProblemAdmin, self).get_queryset(request)
|
||||||
return qs.select_related('autor', 'opravovatel', 'cislo_zadani', 'cislo_reseni').annotate(pocet_reseni=Count('reseni'))
|
return qs.select_related('autor', 'opravovatel', 'cislo_zadani', 'cislo_reseni')
|
||||||
|
|
||||||
def pocet_reseni(self, obj):
|
def pocet_reseni(self, obj):
|
||||||
return obj.pocet_reseni
|
return obj.pocet_reseni
|
||||||
|
|
||||||
admin.site.register(Problem, ProblemAdmin)
|
class ProblemNavrhAdmin(ProblemAdmin):
|
||||||
|
list_display = ['nazev', 'typ', 'stav', 'autor', 'timestamp']
|
||||||
|
list_filter = ['typ', 'stav', 'timestamp']
|
||||||
|
|
||||||
|
def get_queryset(self, request):
|
||||||
|
qs = super(ProblemNavrhAdmin, self).get_queryset(request)
|
||||||
|
return qs.filter(stav__in=[Problem.STAV_NAVRH, Problem.STAV_SMAZANY])
|
||||||
|
|
||||||
|
create_modeladmin(ProblemNavrhAdmin, Problem, 'ProblemNavrh', verbose_name=u'Problém (návrh)', verbose_name_plural=u'Problémy (návrhy)')
|
||||||
|
|
||||||
|
class ProblemZadanyAdmin(ProblemAdmin):
|
||||||
|
list_display = ['nazev', 'typ', 'autor', 'opravovatel', 'kod', 'cislo_zadani', 'pocet_reseni', 'verejne']
|
||||||
|
list_filter = ['typ', 'cislo_zadani__rocnik']
|
||||||
|
inlines = [ReseniKProblemuInline]
|
||||||
|
|
||||||
|
def get_queryset(self, request):
|
||||||
|
qs = super(ProblemZadanyAdmin, self).get_queryset(request)
|
||||||
|
return qs.filter(stav=Problem.STAV_ZADANY).annotate(pocet_reseni=Count('reseni'))
|
||||||
|
|
||||||
|
create_modeladmin(ProblemZadanyAdmin, Problem, 'ProblemZadany', verbose_name=u'Problém (zadaný)', verbose_name_plural=u'Problémy (zadané)')
|
||||||
|
|
||||||
|
#admin.site.register(Problem, ProblemAdmin)
|
||||||
|
|
||||||
### Soustredeni
|
### Soustredeni
|
||||||
|
|
||||||
|
|
|
@ -396,6 +396,12 @@ class Problem(SeminarModelBase):
|
||||||
def verejne_url(self):
|
def verejne_url(self):
|
||||||
return reverse('seminar_problem', kwargs={'pk': self.id})
|
return reverse('seminar_problem', kwargs={'pk': self.id})
|
||||||
|
|
||||||
|
def admin_url(self):
|
||||||
|
if self.stav == Problem.STAV_ZADANY:
|
||||||
|
return reverse('admin:seminar_problemzadany_change', args=(self.id, ))
|
||||||
|
else:
|
||||||
|
return reverse('admin:seminar_problemnavrh_change', args=(self.id, ))
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicate_revisions=True)
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
|
|
Loading…
Reference in a new issue