Fix singleton admin: ensure Save button appears by checking count instead of filter
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user