Fix singleton admin: ensure Save button appears by checking count instead of filter

This commit is contained in:
2025-11-24 15:22:01 +09:00
parent 4502862c74
commit 9f313487de
5 changed files with 218 additions and 13 deletions

View File

@@ -631,5 +631,138 @@ class SiteSettings(models.Model):
return settings
class ContactSettings(models.Model):
"""Контактная информация компании"""
# Основные контакты
company_name = models.CharField(
max_length=200,
default='SmartSolTech',
verbose_name='Название компании'
)
email = models.EmailField(
default='info@smartsoltech.kr',
verbose_name='Email',
help_text='Основной email для связи'
)
phone = models.CharField(
max_length=50,
default='+82-10-XXXX-XXXX',
verbose_name='Телефон',
help_text='Контактный телефон'
)
telegram = models.CharField(
max_length=100,
default='@smartsoltech',
verbose_name='Telegram',
help_text='Telegram username (с @)'
)
whatsapp = models.CharField(
max_length=50,
blank=True,
verbose_name='WhatsApp',
help_text='Номер WhatsApp (опционально)'
)
# Адрес и время работы
address = models.TextField(
default='Seoul, South Korea',
verbose_name='Адрес',
help_text='Полный адрес офиса'
)
working_hours = models.CharField(
max_length=200,
default='Пн-Пт: 9:00-18:00',
verbose_name='Время работы',
help_text='График работы'
)
# Социальные сети
telegram_url = models.URLField(
blank=True,
verbose_name='Telegram URL',
help_text='Ссылка на Telegram канал/группу'
)
instagram_url = models.URLField(
blank=True,
verbose_name='Instagram URL'
)
linkedin_url = models.URLField(
blank=True,
verbose_name='LinkedIn URL'
)
facebook_url = models.URLField(
blank=True,
verbose_name='Facebook URL'
)
twitter_url = models.URLField(
blank=True,
verbose_name='Twitter URL'
)
youtube_url = models.URLField(
blank=True,
verbose_name='YouTube URL'
)
github_url = models.URLField(
blank=True,
verbose_name='GitHub URL'
)
# Дополнительная информация
support_email = models.EmailField(
blank=True,
verbose_name='Email поддержки',
help_text='Отдельный email для техподдержки (опционально)'
)
sales_email = models.EmailField(
blank=True,
verbose_name='Email отдела продаж',
help_text='Email для коммерческих запросов (опционально)'
)
emergency_phone = models.CharField(
max_length=50,
blank=True,
verbose_name='Экстренный телефон',
help_text='Телефон для срочных вопросов (опционально)'
)
# Метаданные
updated_at = models.DateTimeField(
auto_now=True,
verbose_name='Обновлено'
)
class Meta:
verbose_name = 'Контактные данные'
verbose_name_plural = 'Контактные данные'
def __str__(self):
return f'Контакты {self.company_name} (обновлено: {self.updated_at.strftime("%d.%m.%Y")})'
def save(self, *args, **kwargs):
# Singleton pattern - только одна запись
self.pk = 1
super().save(*args, **kwargs)
@classmethod
def get_contacts(cls):
"""Получить контактные данные (создать если не существует)"""
contacts, created = cls.objects.get_or_create(pk=1)
return contacts