0.0.28 get filtered and ordered blocks

This commit is contained in:
SDE
2023-11-30 17:14:10 +03:00
parent 6635f93db8
commit bb2eaf54c4
9 changed files with 178 additions and 14 deletions

View File

@@ -133,6 +133,9 @@ class BaseModelViewPage(BaseModel):
class Meta:
abstract = True
def get_blocks(self):
return self.blocks.filter(enable=True).order_by('order')
def get_description_exists(self):
if self.description:

View File

@@ -1,7 +1,7 @@
from sets.admin import *
from .models import *
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
# from nested_inline.admin import NestedStackedInline, NestedTabularInline, NestedModelAdmin, NestedInline
from super_inlines.admin import SuperInlineModelAdmin, SuperModelAdmin
@@ -133,19 +133,31 @@ class Admin_Block(Admin_Trans_BaseModelViewPage):
admin.site.register(Block,Admin_Block)
class Admin_Option(Admin_BaseModel):
class Admin_Option(Admin_Trans_BaseModel):
def get_fieldsets(self, request, obj=None):
fieldsets = super(type(self), self).get_fieldsets(request, obj)
fieldsets.insert(
1, ('Контент', {
'classes': ['wide'],
'fields': (
'opt_type', 'prefix', 'value', 'picture'
)
# def get_fieldsets(self, request, obj=None):
# fieldsets = super(type(self), self).get_fieldsets(request, obj)
# fieldsets.insert(
# 1, ('Контент', {
# 'classes': ['wide'],
# 'fields': (
# 'opt_type', 'prefix', 'value', 'picture'
# )
#
# })
# )
# return fieldsets
fieldsets = [
(_('Контент'), {
'classes': ['wide'],
'fields': (
'name', 'opt_type', 'prefix', 'value', 'picture'
)
}),
]
})
)
return fieldsets
list_display = ['image_thumb', 'opt_type', 'name', 'prefix', 'value']
list_editable = ['value', 'prefix']
list_filter = ['opt_type']
admin.site.register(Option,Admin_Option)

View File

@@ -0,0 +1,27 @@
from .models import *
def get_options_by_opt_types(opt_types, only_vals=False):
if type(opt_types) == str:
kwargs = {'opt_type': opt_types}
elif type(opt_types) == dict:
kwargs = opt_types
else:
kwargs = {'opt_type__in': opt_types}
opts = Option.objects.filter(**kwargs)
if opts and only_vals:
opts = opts.values('opt_type', 'value')
opts = {item['opt_type']: item['value'] for item in opts}
return opts
def get_first_option_value_by_opt_type(opt_type):
opts = get_options_by_opt_types(opt_type)
if opts:
return opts[0].value
else:
return None
def get_mail_send_options():
opt_types = ['mail_server_url', 'mail_server_smtp_port', 'sender_mail_login', 'sender_mail_password', 'sender_email']
return get_options_by_opt_types(opt_types, only_vals=True)

View File

@@ -0,0 +1,66 @@
from .models import *
from django.utils.translation import gettext as _
required_options_Dict = {
'Адрес почтового сервера': {
'name_ru': 'Адрес почтового сервера',
'opt_type': 'mail_server_url',
'value': '213.142.147.40',
},
'SMTP порт почтового сервера': {
'name_ru': 'SMTP порт почтового сервера',
'opt_type': 'mail_server_smtp_port',
'value': 587,
},
'login для отправки писем с сайта': {
'name_ru': 'email для отправки писем с сайта',
'opt_type': 'sender_mail_login',
'value': 'admin@tripwb.com',
},
'email для отправки': {
'name_ru': 'email для отправки',
'opt_type': 'sender_email',
'value': 'admin@tripwb.com',
},
'Пароль для отправки писем с сайта': {
'name_ru': 'пароль для отправки писем с сайта',
'opt_type': 'sender_mail_password',
'value': 't5Fdcah^gdajY',
},
'Название проекта': {
'name_ru': 'Название проекта',
'opt_type': 'project_name',
'value': 'TWB',
},
'Адрес сайта': {
'name_ru': 'Адрес сайта',
'opt_type': 'domain',
'value': 'tripwb.com',
},
'email техподдержки': {
'name_ru': 'email техподдержки',
'opt_type': 'support_email',
'value': 'admin@tripwb.com',
},
'корпоративный email': {
'name_ru': 'корпоративный email',
'opt_type': 'corp_email',
'value': 'admin@tripwb.com',
},
}
def init_options():
options = Option.objects.all()
option_names = options.values_list('name', flat=True)
opts_for_create = []
for name, data_Dict in required_options_Dict.items():
if not name in option_names:
opt = Option(**data_Dict)
opts_for_create.append(opt)
Option.objects.bulk_create(opts_for_create)
return True

View File

@@ -0,0 +1,48 @@
# Generated by Django 4.2.7 on 2023-11-30 16:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('GeneralApp', '0014_widgetforblock_text_widgetforblock_text_en_and_more'),
]
operations = [
migrations.AddField(
model_name='option',
name='name_en',
field=models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название'),
),
migrations.AddField(
model_name='option',
name='name_ru',
field=models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название'),
),
migrations.AddField(
model_name='option',
name='prefix_en',
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Префикс'),
),
migrations.AddField(
model_name='option',
name='prefix_ru',
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Префикс'),
),
migrations.AddField(
model_name='option',
name='value_en',
field=models.CharField(max_length=250, null=True, verbose_name='Значение'),
),
migrations.AddField(
model_name='option',
name='value_ru',
field=models.CharField(max_length=250, null=True, verbose_name='Значение'),
),
migrations.AlterField(
model_name='block',
name='block_type',
field=models.CharField(choices=[('photo_n_text', 'Фото с одной стороны + Текст с другой стороны'), ('present_technology_block', 'описание и НАЗВАНИЕ слева + Картинка справа'), ('photo150_n_title', 'Фото 150x150 сверху + заголовок под фото'), ('how_work', 'Как с нами работать'), ('how_dev', 'Как ведется разработка'), ('feedback_form', 'Форма обратной связи')], default='photo_n_text', max_length=100, verbose_name='Тип блока'),
),
]

View File

@@ -34,6 +34,7 @@ class Block_Abstract(BaseModelViewPage):
verbose_name = _('Блок')
verbose_name_plural = _('Блоки')
abstract = True
ordering = ['order']
class Block(Block_Abstract):

View File

@@ -15,6 +15,12 @@ class Block_TranslationOptions(TranslationOptions):
translator.register(Block, Block_TranslationOptions)
class Option_TranslationOptions(TranslationOptions):
fields = (
'name', 'value', 'prefix'
)
translator.register(Option, Option_TranslationOptions)
class WidgetForBlock_TranslationOptions(TranslationOptions):
fields = (

View File

@@ -43,6 +43,7 @@ class Section(BaseModelViewPage):
plugin_presentation = GenericRelation('ServicesApp.BlockPluginPresentation',
related_query_name='grel_%(class)s_for_block_plugin_presentation')
class Meta:
verbose_name = _('Раздел сайта')
verbose_name_plural = _('Разделы сайта')

View File

@@ -7,7 +7,7 @@
{#{% include 'blocks/b_how_with_us_working.html' %}#}
{% for block in page.blocks.all %}
{% for block in page.get_blocks %}
{% if block.block_type == 'photo150_n_title' %}
{% include 'blocks/b_photo150_n_title.html' %}
{% elif block.block_type == 'how_work' %}