Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
27
GeneralApp/funcs_options.py
Normal file
27
GeneralApp/funcs_options.py
Normal 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)
|
||||
66
GeneralApp/init_options.py
Normal file
66
GeneralApp/init_options.py
Normal 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
|
||||
@@ -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='Тип блока'),
|
||||
),
|
||||
]
|
||||
@@ -34,6 +34,7 @@ class Block_Abstract(BaseModelViewPage):
|
||||
verbose_name = _('Блок')
|
||||
verbose_name_plural = _('Блоки')
|
||||
abstract = True
|
||||
ordering = ['order']
|
||||
|
||||
|
||||
class Block(Block_Abstract):
|
||||
|
||||
@@ -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 = (
|
||||
|
||||
@@ -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 = _('Разделы сайта')
|
||||
|
||||
@@ -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' %}
|
||||
|
||||
Reference in New Issue
Block a user