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
No related branches found
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 # Generated by Django 3.0.8 on 2020-08-05 08:34
from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import modelcluster.contrib.taggit import modelcluster.contrib.taggit
import modelcluster.fields import modelcluster.fields
from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('taggit', '0003_taggeditem_add_unique_index'), ("taggit", "0003_taggeditem_add_unique_index"),
('program2021', '0002_auto_20200805_0726'), ("program2021", "0002_auto_20200805_0726"),
] ]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Program2021PointPageSearchTag', name="Program2021PointPageSearchTag",
fields=[ 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')), "id",
('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='program2021_program2021pointpagesearchtag_items', to='taggit.Tag')), 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={ options={"abstract": False,},
'abstract': False,
},
), ),
migrations.AddField( migrations.AddField(
model_name='program2021pointpage', model_name="program2021pointpage",
name='search_tags', 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'), 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 ...@@ -6,6 +6,7 @@ from taggit.models import TaggedItemBase
from wagtail.admin.edit_handlers import ( from wagtail.admin.edit_handlers import (
FieldPanel, FieldPanel,
HelpPanel, HelpPanel,
InlinePanel,
MultiFieldPanel, MultiFieldPanel,
ObjectList, ObjectList,
StreamFieldPanel, StreamFieldPanel,
...@@ -19,6 +20,34 @@ from wagtail.images.edit_handlers import ImageChooserPanel ...@@ -19,6 +20,34 @@ from wagtail.images.edit_handlers import ImageChooserPanel
from wagtailmetadata.models import MetadataPageMixin 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): class Program2021HomePage(Page):
### FIELDS ### FIELDS
headline = models.CharField( headline = models.CharField(
...@@ -70,12 +99,26 @@ class Program2021HomePage(Page): ...@@ -70,12 +99,26 @@ class Program2021HomePage(Page):
required_tags.append("travel-every") required_tags.append("travel-every")
# selecty mohou mit vzdy jen jednu hodnotu # 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")) required_tags.append(x + "-" + (request.POST.get(x, "") or "every"))
# TODO : rozpracovana vec, funguje spatne, vrati vsechny body co maji aspon jeden tag # TODO : rozpracovana vec, funguje spatne, vrati vsechny body co maji aspon jeden tag
# bude treba prevest na vahy tagu # 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 raise NotImplementedError
else: else:
...@@ -227,20 +270,24 @@ class Program2021PointPage(Page, MetadataPageMixin): ...@@ -227,20 +270,24 @@ class Program2021PointPage(Page, MetadataPageMixin):
) )
owner_url = models.URLField("odkaz na garanta", blank=True, null=True) owner_url = models.URLField("odkaz na garanta", blank=True, null=True)
tags = ClusterTaggableManager(through=Program2021PointPageTag, blank=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", 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". 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". 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: 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) (gender-male gender-female gender-every)
(age-30 age-50 age-65 age-99 age-every) (age-30 age-50 age-65 age-99 age-every)
(kids-yes kids-no kids-every) (kids-yes kids-no kids-every)
(occupation-student occupation-employee-public occupation-employee-private occupation-entrepreneur occupation-maternity occupation-retired occupation-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) (wealth-excelent wealth-good wealth-average wealth-bad wealth-every)
(travel-bike travel-car travel-public travel-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) (education-zs education-ss education-maturita education-vs education-every)
""") """,
)
### PANELS ### PANELS
...@@ -286,6 +333,8 @@ Pro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do ...@@ -286,6 +333,8 @@ Pro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do
StreamFieldPanel("faq"), StreamFieldPanel("faq"),
] ]
search_panels = [InlinePanel("program_point_link", label="Váhy vyhledávání")]
promote_panels = [ promote_panels = [
MultiFieldPanel( MultiFieldPanel(
[ [
...@@ -302,6 +351,7 @@ Pro kazdou skupinu musis zadat aspon jeden tag, jinak se bod nedostane nikdy do ...@@ -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(content_panels, heading=gettext_lazy("Content")),
ObjectList(benefits_content_panels, heading="Benefity"), ObjectList(benefits_content_panels, heading="Benefity"),
ObjectList(search_panels, heading="Hledání"),
ObjectList(faq_content_panels, heading="FAQ"), ObjectList(faq_content_panels, heading="FAQ"),
ObjectList(promote_panels, heading=gettext_lazy("Promote")), 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