FAQ admin
This commit is contained in:
SDE
2023-11-25 16:31:10 +03:00
parent 4f2c7aeb2c
commit 7831973cdb
13 changed files with 81 additions and 69 deletions

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.contrib import admin from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from ArticlesApp.models import ArticleModel, UserPageModel from ArticlesApp.models import ArticleModel, UserPageModel
from sets.admin import * from sets.admin import *
@@ -68,7 +68,7 @@ class Admin_Article(Admin_Trans_BaseModelViewPage):
# ('devices'), # ('devices'),
) )
}), }),
(u'Статья', { (_('Статья'), {
'classes': ['wide'], 'classes': ['wide'],
'fields': ( 'fields': (
'description', 'text', 'description', 'text',
@@ -114,7 +114,7 @@ class Admin_UserPage(Admin_Trans_BaseModelViewPage):
# ('devices'), # ('devices'),
) )
}), }),
(u'Статья', { (_('Статья'), {
'classes': ['wide'], 'classes': ['wide'],
'fields': ('picture', 'description', 'text') 'fields': ('picture', 'description', 'text')
}), }),

View File

@@ -45,9 +45,10 @@ def get_articles_block_ajax(request):
except Exception as e: except Exception as e:
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'ошибка в запросе = {str(e)}' 'all__': f'{_("ошибка в запросе")} = {str(e)}'
} }
} }
return JsonResponse(errors_Dict, status=400) return JsonResponse(errors_Dict, status=400)

View File

@@ -22,8 +22,8 @@ class UserPageModel(BaseModelViewPage):
text = RichTextUploadingField(verbose_name=u'Текст') text = RichTextUploadingField(verbose_name=u'Текст')
class Meta: class Meta:
verbose_name=u'Пользовательская страница' verbose_name=_("Пользовательская страница")
verbose_name_plural =u'Пользовательские страницы' verbose_name_plural =_("Пользовательские страницы")
# unique_together = ('url', 'region') # unique_together = ('url', 'region')
# managed=True # managed=True
# app_label = u'ArticlesApp' # app_label = u'ArticlesApp'
@@ -31,8 +31,8 @@ class UserPageModel(BaseModelViewPage):
class ArticleModel(BaseModelViewPage): class ArticleModel(BaseModelViewPage):
# pub_DT = models.DateTimeField(verbose_name=u'Дата и время публикации', auto_created=True) # pub_DT = models.DateTimeField(verbose_name=u'Дата и время публикации', auto_created=True)
text = RichTextUploadingField(verbose_name=u'Текст') text = RichTextUploadingField(verbose_name=_("Текст"))
class Meta: class Meta:
verbose_name='Статья' verbose_name=_("Статья")
verbose_name_plural ='Статьи' verbose_name_plural =_("Статьи")

View File

@@ -128,8 +128,8 @@ def change_profile_confirm_ajax(request):
if password and confirm_password: if password and confirm_password:
if password != confirm_password: if password != confirm_password:
errors = { errors = {
'password': 'Не совпадают пароли', 'password': _("Не совпадают пароли"),
'confirm_password': 'Не совпадают пароли', 'confirm_password': _("Не совпадают пароли"),
} }
raise ValidationError(errors) raise ValidationError(errors)
@@ -218,7 +218,7 @@ def login_ajax(request):
else: else:
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'неверный логин и\или пароль' 'all__': _("неверный логин и\или пароль")
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}
@@ -236,7 +236,7 @@ def login_ajax(request):
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'ошибка в запросе = {str(e)}' 'all__': f'{_("ошибка в запросе")} = {str(e)}'
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}
@@ -261,7 +261,7 @@ def registration_ajax(request):
users = User.objects.filter(email=form.data['email']) users = User.objects.filter(email=form.data['email'])
if users: if users:
form.errors['email'] = 'Пользователь с указанным email уже существует' form.errors['email'] = _("Пользователь с указанным email уже существует")
Dict = {'form': form} Dict = {'form': form}
html = render_to_string('forms/f_registration.html', Dict, request=request) html = render_to_string('forms/f_registration.html', Dict, request=request)
return JsonResponse({'html': html}, status=400) return JsonResponse({'html': html}, status=400)
@@ -287,7 +287,7 @@ def registration_ajax(request):
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'__all__': f'ошибка в запросе = {str(e)}' '__all__': f'{_("ошибка в запросе")} = {str(e)}'
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}

View File

@@ -44,6 +44,11 @@ def profile_page_View(request, page_name, id=None):
'page_type': 'profile' 'page_type': 'profile'
} }
if request.GET and 'mobile' in request.GET and request.GET['mobile']:
Dict.update({
'mobile': True
})
t = loader.get_template('pages/profile/p_user_profile.html') t = loader.get_template('pages/profile/p_user_profile.html')
return get_inter_http_respose(t, Dict, request) return get_inter_http_respose(t, Dict, request)
# return HttpResponse(t.render(Dict, request)) # return HttpResponse(t.render(Dict, request))
@@ -153,7 +158,7 @@ def create_personal_user(data, creator):
} }
except Exception as e: except Exception as e:
return { return {
'error': 'Ошибка добавление нового пользователя = {0}'.format(str(e)), 'error': f'{_("Ошибка добавление нового пользователя")} = {str(e)}',
} }

View File

@@ -8,6 +8,7 @@ from django.utils.safestring import mark_safe
from django.db import models from django.db import models
from django.contrib import admin from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline, GenericStackedInline from django.contrib.contenttypes.admin import GenericTabularInline, GenericStackedInline
from django.utils.translation import gettext as _
import re import re
# from modeltranslation.admin import TranslationAdmin # from modeltranslation.admin import TranslationAdmin
@@ -218,7 +219,7 @@ class Admin_GenericBaseIconStackedInline(GenericStackedInline):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True
@@ -231,7 +232,7 @@ class Admin_BaseIconStackedInline(admin.StackedInline):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True
@@ -243,7 +244,7 @@ class Admin_BaseIconTabularModel(admin.TabularInline):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True
@@ -258,7 +259,7 @@ class Admin_BaseIconModel(admin.ModelAdmin):
return s return s
description_exists.short_description = u'Описание' description_exists.short_description = _('Описание')
description_exists.allow_tags = True description_exists.allow_tags = True
def formfield_for_dbfield (self, db_field, request, **kwargs): def formfield_for_dbfield (self, db_field, request, **kwargs):
@@ -271,7 +272,7 @@ class Admin_BaseIconModel(admin.ModelAdmin):
def image_thumb(self, obj): def image_thumb(self, obj):
return get_image_thumb(self, obj) return get_image_thumb(self, obj)
image_thumb.short_description = u'Миниатюра' image_thumb.short_description = _('Миниатюра')
image_thumb.allow_tags = True image_thumb.allow_tags = True

View File

@@ -502,7 +502,7 @@ def create_ticket_ajax(request):
errors_Dict = { errors_Dict = {
'errors': { 'errors': {
'all__': f'ошибка в запросе = {str(e)}' 'all__': f'{_("ошибка в запросе")} = {str(e)}'
} }
} }
Dict = {'form': errors_Dict} Dict = {'form': errors_Dict}

View File

@@ -3,35 +3,35 @@ from BaseModels.base_models import BaseModel
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
msg_type_choices = ( msg_type_choices = (
('support', 'техподдержка'), ('support', _('техподдержка')),
('private', 'личное') ('private', _('личное'))
) )
msg_status_choices = ( msg_status_choices = (
('sended', 'Отправлено'), ('sended', _('Отправлено')),
('seen', 'Просмотрено') ('seen', _('Просмотрено'))
) )
grp_msg_status = ( grp_msg_status = (
('open', 'Открыт'), ('open', _('Открыт')),
('answered', 'Отвечен'), ('answered', _('Отвечен')),
('closed', 'Закрыт') ('closed', _('Закрыт'))
) )
grp_msg_department = ( grp_msg_department = (
('support', 'Отдел: Техническая поддержка'), ('support', _('Отдел: Техническая поддержка')),
('finance', 'Отдел: Финансовый департамент'), ('finance', _('Отдел: Финансовый департамент')),
) )
class MsgGroup(BaseModel): class MsgGroup(BaseModel):
from AuthApp.models import User from AuthApp.models import User
department = models.CharField(verbose_name='Отдел', default='support', choices=grp_msg_department) department = models.CharField(verbose_name=_('Отдел'), default='support', choices=grp_msg_department)
status = models.CharField(verbose_name='Статус', default='open', choices=grp_msg_status) status = models.CharField(verbose_name=_('Статус'), default='open', choices=grp_msg_status)
text = models.TextField(verbose_name='Сообщение') text = models.TextField(verbose_name=_('Сообщение'))
owner = models.ForeignKey(User, verbose_name=_('Владелец'), related_name='rel_msgGroups_for_owner', owner = models.ForeignKey(User, verbose_name=_('Владелец'), related_name='rel_msgGroups_for_owner',
on_delete=models.SET_NULL, null=True) on_delete=models.SET_NULL, null=True)
@@ -46,23 +46,23 @@ class MsgGroup(BaseModel):
class Message(BaseModel): class Message(BaseModel):
from AuthApp.models import User from AuthApp.models import User
msg_type = models.CharField(max_length=50, verbose_name='Тип сообщения', default='private', choices=msg_type_choices) msg_type = models.CharField(max_length=50, verbose_name=_('Тип сообщения'), default='private', choices=msg_type_choices)
group = models.ForeignKey( group = models.ForeignKey(
MsgGroup, verbose_name='Группа сообщений', related_name='rel_messages_for_group', MsgGroup, verbose_name=_('Группа сообщений'), related_name='rel_messages_for_group',
on_delete=models.SET_NULL, null=True) on_delete=models.SET_NULL, null=True)
sender = models.ForeignKey( sender = models.ForeignKey(
User, verbose_name='Отправитель', on_delete=models.CASCADE, related_name='rel_messages_for_sender' User, verbose_name=_('Отправитель'), on_delete=models.CASCADE, related_name='rel_messages_for_sender'
) )
receiver = models.ForeignKey( receiver = models.ForeignKey(
User, verbose_name='Получатель', on_delete=models.CASCADE, related_name='rel_messages_for_receiver' User, verbose_name=_('Получатель'), on_delete=models.CASCADE, related_name='rel_messages_for_receiver'
) )
text = models.TextField(verbose_name='Сообщение') text = models.TextField(verbose_name=_('Сообщение'))
status = models.CharField(verbose_name='Статус', default='sended', choices=msg_status_choices) status = models.CharField(verbose_name=_('Статус'), default='sended', choices=msg_status_choices)
files = models.JSONField(verbose_name='Прикрепленные файлы', default=dict) files = models.JSONField(verbose_name=_('Прикрепленные файлы'), default=dict)
class Meta: class Meta:
verbose_name = _('Сообщение') verbose_name = _('Сообщение')

View File

@@ -5,7 +5,7 @@ from django.utils.translation import gettext_lazy as _
from ckeditor_uploader.fields import RichTextUploadingField from ckeditor_uploader.fields import RichTextUploadingField
class StaticPage(BaseModelViewPage): class StaticPage(BaseModelViewPage):
promo_header = models.BooleanField(verbose_name='Промо-хэдер', default=False) promo_header = models.BooleanField(verbose_name=_('Промо-хэдер'), default=False)
class Meta: class Meta:
verbose_name = _('Статическая страница') verbose_name = _('Статическая страница')
@@ -17,9 +17,9 @@ class Block(BaseModelViewPage):
verbose_name_plural = _('Блоки на страницах') verbose_name_plural = _('Блоки на страницах')
class Option(BaseModel): class Option(BaseModel):
opt_type = models.CharField(max_length=250, verbose_name='Тип', blank=True, null=True) opt_type = models.CharField(max_length=250, verbose_name=_('Тип'), blank=True, null=True)
prefix = models.CharField(max_length=250, verbose_name='Префикс', blank=True, null=True) prefix = models.CharField(max_length=250, verbose_name=_('Префикс'), blank=True, null=True)
value = models.CharField(max_length=250, verbose_name='Значение') value = models.CharField(max_length=250, verbose_name=_('Значение'))
picture = models.ImageField(upload_to='uploads/', verbose_name=_('Миниатюра'), null=True, blank=True, picture = models.ImageField(upload_to='uploads/', verbose_name=_('Миниатюра'), null=True, blank=True,
help_text=u'') help_text=u'')
@@ -36,8 +36,8 @@ class FAQitem(BaseModel):
object_id = models.PositiveIntegerField() object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id') content_object = GenericForeignKey('content_type', 'object_id')
question = models.TextField(verbose_name='Вопрос') question = models.TextField(verbose_name=_('Вопрос'))
answer = RichTextUploadingField(verbose_name='Ответ') answer = RichTextUploadingField(verbose_name=_('Ответ'))
def __str__(self): def __str__(self):
if self.question: if self.question:

View File

@@ -3,21 +3,21 @@ from BaseModels.base_models import BaseModel
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
class Country(BaseModel): class Country(BaseModel):
international_name = models.CharField(max_length=250, verbose_name='Международное название', blank=True, null=True) international_name = models.CharField(max_length=250, verbose_name=_('Международное название'), blank=True, null=True)
official_name = models.CharField(max_length=250, verbose_name='Официальное название', blank=True, null=True) official_name = models.CharField(max_length=250, verbose_name=_('Официальное название'), blank=True, null=True)
short_code = models.CharField(max_length=2, verbose_name='Код страны по ISO3166-1:alpha2') short_code = models.CharField(max_length=2, verbose_name=_('Код страны по ISO3166-1:alpha2'))
code = models.CharField(max_length=3, verbose_name='Код страны по ISO3166-1:alpha3') code = models.CharField(max_length=3, verbose_name=_('Код страны по ISO3166-1:alpha3'))
num_code = models.CharField(max_length=3, verbose_name='Код страны по ISO3166-1:numeric', blank=True, null=True) num_code = models.CharField(max_length=3, verbose_name=_('Код страны по ISO3166-1:numeric'), blank=True, null=True)
flag_img_url = models.URLField(verbose_name='Ссылка на изображение флага', blank=True, null=True) flag_img_url = models.URLField(verbose_name=_('Ссылка на изображение флага'), blank=True, null=True)
geo_lat = models.CharField(max_length=20, verbose_name='GPS широта', blank=True, null=True) geo_lat = models.CharField(max_length=20, verbose_name=_('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name='GPS долгота', blank=True, null=True) geo_lon = models.CharField(max_length=20, verbose_name=_('GPS долгота'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True) area_id = models.BigIntegerField(blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name='Дата и время завершения парсинга', blank=True, null=True) parsing_finished_DT = models.DateTimeField(verbose_name=_('Дата и время завершения парсинга'), blank=True, null=True)
def __str__(self): def __str__(self):
if self.name: if self.name:
@@ -39,14 +39,14 @@ class Country(BaseModel):
class City(BaseModel): class City(BaseModel):
country = models.ForeignKey( country = models.ForeignKey(
Country, verbose_name='Страна', related_name='rel_cities_for_country', on_delete=models.CASCADE) Country, verbose_name=_('Страна'), related_name='rel_cities_for_country', on_delete=models.CASCADE)
geo_lat = models.CharField(max_length=20, verbose_name='GPS широта', blank=True, null=True) geo_lat = models.CharField(max_length=20, verbose_name=_('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name='GPS долгота', blank=True, null=True) geo_lon = models.CharField(max_length=20, verbose_name=_('GPS долгота'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True) area_id = models.BigIntegerField(blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name='Дата и время завершения парсинга', blank=True, null=True) parsing_finished_DT = models.DateTimeField(verbose_name=_('Дата и время завершения парсинга'), blank=True, null=True)
def __str__(self): def __str__(self):
if self.name: if self.name:
@@ -55,7 +55,7 @@ class City(BaseModel):
return f'{self.id}' return f'{self.id}'
def get_country_n_city_str(self): def get_country_n_city_str(self):
country = 'Неизвестно' country = _('Неизвестно')
city = self.name city = self.name
if self.country: if self.country:
country = self.country country = self.country
@@ -72,20 +72,20 @@ class City(BaseModel):
class Airport(BaseModel): class Airport(BaseModel):
city = models.ForeignKey( city = models.ForeignKey(
City, verbose_name='Город', related_name='rel_airports_for_city', on_delete=models.CASCADE, City, verbose_name=_('Город'), related_name='rel_airports_for_city', on_delete=models.CASCADE,
blank=True, null=True) blank=True, null=True)
international_name = models.CharField(max_length=250, verbose_name='Международное название', blank=True, null=True) international_name = models.CharField(max_length=250, verbose_name=_('Международное название'), blank=True, null=True)
iata_code = models.CharField(max_length=3, verbose_name='IATA') iata_code = models.CharField(max_length=3, verbose_name='IATA')
icao_code = models.CharField(max_length=4, verbose_name='ICAO') icao_code = models.CharField(max_length=4, verbose_name='ICAO')
geo_lat = models.CharField(max_length=20, verbose_name='GPS широта', blank=True, null=True) geo_lat = models.CharField(max_length=20, verbose_name=_('GPS широта'), blank=True, null=True)
geo_lon = models.CharField(max_length=20, verbose_name='GPS долгота', blank=True, null=True) geo_lon = models.CharField(max_length=20, verbose_name=_('GPS долгота'), blank=True, null=True)
area_id = models.BigIntegerField(blank=True, null=True) area_id = models.BigIntegerField(blank=True, null=True)
parsing_finished_DT = models.DateTimeField(verbose_name='Дата и время завершения парсинга', blank=True, null=True) parsing_finished_DT = models.DateTimeField(verbose_name=_('Дата и время завершения парсинга'), blank=True, null=True)
def __str__(self): def __str__(self):
if self.name: if self.name:

View File

@@ -24,8 +24,8 @@ cargo_type_choices = (
) )
owner_type_choices = ( owner_type_choices = (
('customer', 'Заказчик'), ('customer', _('Заказчик')),
('mover', 'Перевозчик') ('mover', _('Перевозчик'))
) )

View File

@@ -6,6 +6,9 @@
padding-left: 35px; padding-left: 35px;
padding-right: 105px; padding-right: 105px;
} }
.cut_width_f_curtain.n_profile.open{
right: 0;
}
} }
@media (max-width: 1199px){ @media (max-width: 1199px){
.benefit_img_about_service>figure>img{ .benefit_img_about_service>figure>img{
@@ -624,6 +627,7 @@
/*.cut_width_f_curtain.n_profile.open{*/ /*.cut_width_f_curtain.n_profile.open{*/
/* display: block;*/ /* display: block;*/
/* min-width: 1280px;*/ /* min-width: 1280px;*/
/* right: 0;*/
/*}*/ /*}*/

View File

@@ -2347,7 +2347,8 @@
.cut_width_f_curtain.n_profile.open{ .cut_width_f_curtain.n_profile.open{
display: block; display: block;
min-width: 1280px; /*min-width: 1280px;*/
right: calc((100vw - 1280px) / 2)
} }