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

@@ -3,7 +3,7 @@ from .models import (
Service, Project, Client, Order, Review, BlogPost,
Category, ServiceRequest, AboutPage, FooterSettings, TeamMember,
PortfolioItem, PrivacyPolicy, TermsOfUse, NewsArticle, CareerVacancy,
SiteSettings, PortfolioImage
SiteSettings, PortfolioImage, ContactSettings
)
from .forms import ProjectForm
@@ -163,7 +163,12 @@ class AboutPageAdmin(admin.ModelAdmin):
)
def has_add_permission(self, request):
return not AboutPage.objects.filter(is_active=True).exists()
# Разрешить создание если нет ни одной записи
return AboutPage.objects.count() == 0
def has_delete_permission(self, request, obj=None):
# Запретить удаление
return False
@admin.register(FooterSettings)
@@ -209,7 +214,12 @@ class FooterSettingsAdmin(admin.ModelAdmin):
)
def has_add_permission(self, request):
return not FooterSettings.objects.filter(is_active=True).exists()
# Разрешить создание если нет ни одной записи
return FooterSettings.objects.count() == 0
def has_delete_permission(self, request, obj=None):
# Запретить удаление единственной активной записи
return False
@admin.register(TeamMember)
@@ -259,3 +269,53 @@ class SiteSettingsAdmin(admin.ModelAdmin):
return False
@admin.register(ContactSettings)
class ContactSettingsAdmin(admin.ModelAdmin):
list_display = ('company_name', 'email', 'phone', 'telegram', 'updated_at')
fieldsets = (
('📋 Основная информация', {
'fields': ('company_name',),
'description': 'Название компании'
}),
('📞 Основные контакты', {
'fields': ('email', 'phone', 'telegram', 'whatsapp'),
'description': 'Главные каналы связи с клиентами'
}),
('📍 Адрес и режим работы', {
'fields': ('address', 'working_hours'),
}),
('🌐 Социальные сети', {
'fields': (
'telegram_url',
'instagram_url',
'linkedin_url',
'facebook_url',
'twitter_url',
'youtube_url',
'github_url'
),
'classes': ('collapse',),
'description': 'Ссылки на страницы в социальных сетях'
}),
('📧 Дополнительные контакты', {
'fields': ('support_email', 'sales_email', 'emergency_phone'),
'classes': ('collapse',),
'description': 'Специализированные контакты (опционально)'
}),
)
def has_add_permission(self, request):
# Запретить создание новых записей (singleton)
return not ContactSettings.objects.exists()
def has_delete_permission(self, request, obj=None):
# Запретить удаление контактов
return False
class Media:
css = {
'all': ('admin/css/forms.css',)
}