Pohádka: model a admin
* migrace
This commit is contained in:
parent
1b9fa91061
commit
5ddf810a2f
3 changed files with 118 additions and 2 deletions
|
@ -11,7 +11,7 @@ from django.db import models
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator, Prispevek
|
from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Nastaveni, Soustredeni, Soustredeni_Ucastnici, Soustredeni_Organizatori, Novinky, Organizator, Prispevek, Pohadka
|
||||||
from autocomplete_light import shortcuts as autocomplete_light
|
from autocomplete_light import shortcuts as autocomplete_light
|
||||||
|
|
||||||
|
|
||||||
|
@ -296,6 +296,39 @@ class ReseniAdmin(VersionAdmin):
|
||||||
admin.site.register(Reseni, ReseniAdmin)
|
admin.site.register(Reseni, ReseniAdmin)
|
||||||
|
|
||||||
|
|
||||||
|
### Pohádka
|
||||||
|
|
||||||
|
class PohadkaAdminForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Pohadka
|
||||||
|
exclude = []
|
||||||
|
autor = UserModelChoiceField(User.objects.filter(is_staff=True))
|
||||||
|
uloha = forms.ModelChoiceField(Problem.objects.filter(typ=Problem.TYP_ULOHA))
|
||||||
|
|
||||||
|
class PohadkaAdmin(VersionAdmin):
|
||||||
|
form = PohadkaAdminForm
|
||||||
|
|
||||||
|
def get_kod_ulohy(self, obj):
|
||||||
|
return obj.uloha.kod_v_rocniku()
|
||||||
|
get_kod_ulohy.short_description = u'Kód úlohy'
|
||||||
|
|
||||||
|
def get_rocnik(self, obj):
|
||||||
|
return obj.uloha.cislo_zadani.rocnik.rocnik
|
||||||
|
get_rocnik.short_description = u'Ročník'
|
||||||
|
|
||||||
|
list_display = ['__str__', 'get_rocnik', 'get_kod_ulohy', 'uloha', 'autor', 'timestamp']
|
||||||
|
|
||||||
|
get_form = get_form_predvypln_autora
|
||||||
|
|
||||||
|
class PohadkaKProblemuInline(admin.TabularInline):
|
||||||
|
form = PohadkaAdminForm
|
||||||
|
model = Pohadka
|
||||||
|
exclude = []
|
||||||
|
extra = 0
|
||||||
|
|
||||||
|
admin.site.register(Pohadka, PohadkaAdmin)
|
||||||
|
|
||||||
|
|
||||||
### Problem
|
### Problem
|
||||||
|
|
||||||
from autocomplete_light.contrib.taggit_field import TaggitField, TaggitWidget
|
from autocomplete_light.contrib.taggit_field import TaggitField, TaggitWidget
|
||||||
|
@ -348,7 +381,14 @@ create_modeladmin(ProblemNavrhAdmin, Problem, 'ProblemNavrh', verbose_name=u'Pro
|
||||||
class ProblemZadanyAdmin(ProblemAdmin):
|
class ProblemZadanyAdmin(ProblemAdmin):
|
||||||
list_display = ['nazev', 'typ', 'autor', 'opravovatel', 'kod', 'cislo_zadani', 'pocet_reseni', 'verejne']
|
list_display = ['nazev', 'typ', 'autor', 'opravovatel', 'kod', 'cislo_zadani', 'pocet_reseni', 'verejne']
|
||||||
list_filter = ['typ', 'zamereni', 'cislo_zadani__cislo', 'cislo_zadani__rocnik']
|
list_filter = ['typ', 'zamereni', 'cislo_zadani__cislo', 'cislo_zadani__rocnik']
|
||||||
inlines = [ReseniKProblemuInline]
|
|
||||||
|
def get_inline_instances(self, request, obj=None):
|
||||||
|
if obj and obj.typ == Problem.TYP_ULOHA:
|
||||||
|
inlines = [ReseniKProblemuInline, PohadkaKProblemuInline]
|
||||||
|
else:
|
||||||
|
inlines = [ReseniKProblemuInline]
|
||||||
|
|
||||||
|
return [inline(self.model, self.admin_site) for inline in inlines]
|
||||||
|
|
||||||
def get_queryset(self, request):
|
def get_queryset(self, request):
|
||||||
qs = super(ProblemZadanyAdmin, self).get_queryset(request)
|
qs = super(ProblemZadanyAdmin, self).get_queryset(request)
|
||||||
|
|
34
seminar/migrations/0039_pohadka.py
Normal file
34
seminar/migrations/0039_pohadka.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.utils.timezone
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('seminar', '0038_change_meta_prispevek'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Pohadka',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(serialize=False, primary_key=True)),
|
||||||
|
('text', models.TextField(verbose_name='Text poh\xe1dky')),
|
||||||
|
('pred', models.BooleanField(default=True, verbose_name='P\u0159ed \xfalohou')),
|
||||||
|
('timestamp', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Vytvo\u0159eno', editable=False, blank=True)),
|
||||||
|
('autor', models.ForeignKey(verbose_name=b'Autor poh\xc3\xa1dky', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('uloha', models.ForeignKey(related_name='pohadky', verbose_name='\xdaloha', to='seminar.Problem')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'ordering': ['uloha__cislo_zadani', 'uloha__kod', '-pred'],
|
||||||
|
'db_table': 'seminar_pohadky',
|
||||||
|
'verbose_name': 'Poh\xe1dka',
|
||||||
|
'verbose_name_plural': 'Poh\xe1dky',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -585,6 +585,48 @@ class PrilohaReseni(SeminarModelBase):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return force_unicode(self.soubor)
|
return force_unicode(self.soubor)
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
|
class Pohadka(SeminarModelBase):
|
||||||
|
u"""Kus pohádky před/za úlohou v čísle"""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'seminar_pohadky'
|
||||||
|
verbose_name = u'Pohádka'
|
||||||
|
verbose_name_plural = u'Pohádky'
|
||||||
|
ordering = ['uloha__cislo_zadani', 'uloha__kod', '-pred']
|
||||||
|
|
||||||
|
# Interní ID
|
||||||
|
id = models.AutoField(primary_key=True)
|
||||||
|
|
||||||
|
text = models.TextField(u'Text pohádky')
|
||||||
|
uloha = models.ForeignKey(
|
||||||
|
Problem,
|
||||||
|
verbose_name=u'Úloha',
|
||||||
|
related_name='pohadky'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Kusů pohádky je v čísle obvykle o 1 více, než úloh. Jeden bude za úlohou
|
||||||
|
# místo před ní.
|
||||||
|
pred = models.BooleanField(u'Před úlohou', default=True)
|
||||||
|
|
||||||
|
autor = models.ForeignKey(
|
||||||
|
settings.AUTH_USER_MODEL,
|
||||||
|
verbose_name="Autor pohádky"
|
||||||
|
)
|
||||||
|
|
||||||
|
timestamp = models.DateTimeField(
|
||||||
|
u'Vytvořeno',
|
||||||
|
default=timezone.now,
|
||||||
|
blank=True,
|
||||||
|
editable=False
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
uryvek = self.text if len(self.text) < (50-3) else self.text[:50]+"..."
|
||||||
|
return force_unicode(uryvek)
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicate_revisions=True)
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
class Prispevek(SeminarModelBase):
|
class Prispevek(SeminarModelBase):
|
||||||
problem = models.ForeignKey(Problem, verbose_name='Problém') # TODO autokompleet
|
problem = models.ForeignKey(Problem, verbose_name='Problém') # TODO autokompleet
|
||||||
|
|
Loading…
Reference in a new issue