Skip to content
Snippets Groups Projects
Commit 02c33408 authored by jarmil's avatar jarmil Committed by jan.bednarik
Browse files

WIP: modifikovan model pro vahy programovych bodu, zakladni editace

parent 3dcb1758
Branches
No related tags found
2 merge requests!137Sync test,!69Vyhledávání v programu dle vah
[
{
"model": "program2021.SearchCharacteristic",
"pk": 1,
"fields": {
"name": "Pohlaví - žena"
}
},
{
"model": "program2021.SearchCharacteristic",
"pk": 2,
"fields": {
"name": "Pohlaví - muž"
}
},
{
"model": "program2021.SearchCharacteristic",
"pk": 3,
"fields": {
"name": "Pohlaví - nezadáno"
}
}
]
# Generated by Django 3.0.8 on 2020-08-05 08:34
from django.db import migrations, models
import django.db.models.deletion
import modelcluster.contrib.taggit
import modelcluster.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('taggit', '0003_taggeditem_add_unique_index'),
('program2021', '0002_auto_20200805_0726'),
("taggit", "0003_taggeditem_add_unique_index"),
("program2021", "0002_auto_20200805_0726"),
]
operations = [
migrations.CreateModel(
name='Program2021PointPageSearchTag',
name="Program2021PointPageSearchTag",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content_object', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, to='program2021.Program2021PointPage')),
('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='program2021_program2021pointpagesearchtag_items', to='taggit.Tag')),
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"content_object",
modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
to="program2021.Program2021PointPage",
),
),
(
"tag",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="program2021_program2021pointpagesearchtag_items",
to="taggit.Tag",
),
),
],
options={
'abstract': False,
},
options={"abstract": False,},
),
migrations.AddField(
model_name='program2021pointpage',
name='search_tags',
field=modelcluster.contrib.taggit.ClusterTaggableManager(blank=True, help_text='Tagy pro vyhledavani. Musi byt zadany presne, aby to fungovalo. Tagy jsou deleny do skupin se spolecnym prefixem, napr. "gender". \nPriklad: chces-li programovy bod pouze pro muze, zadej tag "gender-male", pokud je to jedno, musis zadat tag "gender-every". Seznam tagu a skupin:\nx y z\nb d f\nl o p q\n ', related_name='search_tags', through='program2021.Program2021PointPageSearchTag', to='taggit.Tag', verbose_name='Tags'),
model_name="program2021pointpage",
name="search_tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text='Tagy pro vyhledavani. Musi byt zadany presne, aby to fungovalo. Tagy jsou deleny do skupin se spolecnym prefixem, napr. "gender". \nPriklad: chces-li programovy bod pouze pro muze, zadej tag "gender-male", pokud je to jedno, musis zadat tag "gender-every". Seznam tagu a skupin:\nx y z\nb d f\nl o p q\n ',
related_name="search_tags",
through="program2021.Program2021PointPageSearchTag",
to="taggit.Tag",
verbose_name="Tags",
),
),
]
# Generated by Django 3.0.8 on 2020-08-12 11:37
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("program2021", "0003_auto_20200805_1034"),
("program2021", "0003_program2021pointpage_image_title"),
]
operations = []
# Generated by Django 3.0.8 on 2020-08-12 11:37
import django.db.models.deletion
import modelcluster.contrib.taggit
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("taggit", "0003_taggeditem_add_unique_index"),
("program2021", "0004_merge_20200812_1337"),
]
operations = [
migrations.CreateModel(
name="SearchCharacteristic",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"name",
models.CharField(
max_length=200,
verbose_name="lidský název pro použití v administraci",
),
),
],
),
migrations.AlterField(
model_name="program2021pointpage",
name="search_tags",
field=modelcluster.contrib.taggit.ClusterTaggableManager(
blank=True,
help_text='Deleny do skupin se spolecnym prefixem, napr. "gender". Pokud je bod spolecny pro vsechny moznosti dane skupiny, pouzij tag se suffixem "-every". \nPriklad: chces-li programovy bod pouze pro muze, zadej tag "gender-male", pokud je to jedno, musis zadat tag "gender-every". \nPro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do vysledku vyhledavani. Seznam tagu po skupinach:\n(gender-male gender-female gender-every) \n(age-30 age-50 age-65 age-99 age-every) \n(kids-yes kids-no kids-every)\n(occupation-student occupation-employee-public occupation-employee-private occupation-entrepreneur occupation-maternity occupation-retired occupation-every)\n(wealth-excelent wealth-good wealth-average wealth-bad wealth-every)\n(travel-bike travel-car travel-public travel-every)\n(housing-metropolis housing-town housing-village housing-every) \n(education-zs education-ss education-maturita education-vs education-every)\n ',
related_name="search_tags",
through="program2021.Program2021PointPageSearchTag",
to="taggit.Tag",
verbose_name="Tagy pro vyhledávání",
),
),
migrations.CreateModel(
name="CharacteristicWeight",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("weight", models.IntegerField()),
(
"program_point",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="program2021.Program2021PointPage",
),
),
(
"search_characteristic",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="program2021.SearchCharacteristic",
),
),
],
),
]
# Generated by Django 3.0.8 on 2020-08-12 13:56
import django.db.models.deletion
import modelcluster.fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("program2021", "0005_auto_20200812_1337"),
]
operations = [
migrations.AlterField(
model_name="characteristicweight",
name="program_point",
field=modelcluster.fields.ParentalKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="program_point_link",
to="program2021.Program2021PointPage",
),
),
migrations.AlterField(
model_name="characteristicweight",
name="search_characteristic",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="program2021.SearchCharacteristic",
verbose_name="Charakteristika",
),
),
migrations.AlterField(
model_name="characteristicweight",
name="weight",
field=models.IntegerField(verbose_name="Váha"),
),
]
......@@ -6,6 +6,7 @@ from taggit.models import TaggedItemBase
from wagtail.admin.edit_handlers import (
FieldPanel,
HelpPanel,
InlinePanel,
MultiFieldPanel,
ObjectList,
StreamFieldPanel,
......@@ -19,6 +20,34 @@ from wagtail.images.edit_handlers import ImageChooserPanel
from wagtailmetadata.models import MetadataPageMixin
class SearchCharacteristic(models.Model):
""" Ciselnik charakteristik odesilanych uzivatelem, napriklad vek65+ """
name = models.CharField("Název", max_length=200, blank=False, null=False)
def __str__(self):
return self.name
class CharacteristicWeight(models.Model):
""" Prirazeni vahy jedntlivych charakteristik programovym blokum """
search_characteristic = models.ForeignKey(
SearchCharacteristic, on_delete=models.CASCADE, verbose_name="Zadáno"
)
program_point = ParentalKey(
"Program2021PointPage",
on_delete=models.CASCADE,
related_name="program_point_link",
)
weight = models.IntegerField(verbose_name="Váha")
panels = [
FieldPanel("search_characteristic"),
FieldPanel("weight"),
]
class Program2021HomePage(Page):
### FIELDS
headline = models.CharField(
......@@ -70,12 +99,26 @@ class Program2021HomePage(Page):
required_tags.append("travel-every")
# selecty mohou mit vzdy jen jednu hodnotu
for x in ["age", "gender", "kids", "occupation", "wealth", "housing", "education"]:
for x in [
"age",
"gender",
"kids",
"occupation",
"wealth",
"housing",
"education",
]:
required_tags.append(x + "-" + (request.POST.get(x, "") or "every"))
# TODO : rozpracovana vec, funguje spatne, vrati vsechny body co maji aspon jeden tag
# bude treba prevest na vahy tagu
context["points"] = self.get_children().live().specific().filter(program2021pointpage__search_tags__name__in=required_tags).distinct()
context["points"] = (
self.get_children()
.live()
.specific()
.filter(program2021pointpage__search_tags__name__in=required_tags)
.distinct()
)
raise NotImplementedError
else:
......@@ -227,20 +270,24 @@ class Program2021PointPage(Page, MetadataPageMixin):
)
owner_url = models.URLField("odkaz na garanta", blank=True, null=True)
tags = ClusterTaggableManager(through=Program2021PointPageTag, blank=True)
search_tags = ClusterTaggableManager("Tagy pro vyhledávání", through=Program2021PointPageSearchTag, blank=True,
search_tags = ClusterTaggableManager(
"Tagy pro vyhledávání",
through=Program2021PointPageSearchTag,
blank=True,
related_name="search_tags",
help_text="""Deleny do skupin se spolecnym prefixem, napr. "gender". Pokud je bod spolecny pro vsechny moznosti dane skupiny, pouzij tag se suffixem "-every".
Priklad: chces-li programovy bod pouze pro muze, zadej tag "gender-male", pokud je to jedno, musis zadat tag "gender-every".
help_text="""Deleny do skupin se spolecnym prefixem, napr. "gender". Pokud je bod spolecny pro vsechny moznosti dane skupiny, pouzij tag se suffixem "-every".
Priklad: chces-li programovy bod pouze pro muze, zadej tag "gender-male", pokud je to jedno, musis zadat tag "gender-every".
Pro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do vysledku vyhledavani. Seznam tagu po skupinach:
(gender-male gender-female gender-every)
(age-30 age-50 age-65 age-99 age-every)
(gender-male gender-female gender-every)
(age-30 age-50 age-65 age-99 age-every)
(kids-yes kids-no kids-every)
(occupation-student occupation-employee-public occupation-employee-private occupation-entrepreneur occupation-maternity occupation-retired occupation-every)
(wealth-excelent wealth-good wealth-average wealth-bad wealth-every)
(travel-bike travel-car travel-public travel-every)
(housing-metropolis housing-town housing-village housing-every)
(housing-metropolis housing-town housing-village housing-every)
(education-zs education-ss education-maturita education-vs education-every)
""")
""",
)
### PANELS
......@@ -286,6 +333,8 @@ Pro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do
StreamFieldPanel("faq"),
]
search_panels = [InlinePanel("program_point_link", label="Váhy vyhledávání")]
promote_panels = [
MultiFieldPanel(
[
......@@ -302,6 +351,7 @@ Pro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do
[
ObjectList(content_panels, heading=gettext_lazy("Content")),
ObjectList(benefits_content_panels, heading="Benefity"),
ObjectList(search_panels, heading="Hledání"),
ObjectList(faq_content_panels, heading="FAQ"),
ObjectList(promote_panels, heading=gettext_lazy("Promote")),
]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment