Source code for firm_info.admin
from django.contrib import admin
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from smart_media.admin import SmartModelAdmin
from .forms import AppsBannerForm
from .models import AppsBanner, FirmContact, Link, SocialSharing, Tracking
[docs]
class UniqueModelAdmin(admin.ModelAdmin):
"""
A custom ModelAdmin that restricts the addition of model instances to only one.
This admin class overrides the default add permission to ensure that only one
instance of the associated model can exist at any given time.
If an instance already exists, it prohibits adding new instances.
"""
def has_add_permission(self, request):
existing_count = self.model.objects.count()
if existing_count == 0:
return super().has_add_permission(request)
else:
return False
def clean(self):
existing_count = self.model.objects.count()
if existing_count > 1:
# raise validation error if there is more than one firm contact
raise ValidationError(
_("Only one {} instance is allowed.").format(self.model.__name__)
)
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
pass
class LinkInline(admin.TabularInline):
model = Link
extra = 1
@admin.register(FirmContact)
class ClientContactAdmin(UniqueModelAdmin):
inlines = [LinkInline]
formfield_overrides = SmartModelAdmin.formfield_overrides
@admin.register(SocialSharing)
class SocialSharingAdmin(UniqueModelAdmin):
pass
@admin.register(Tracking)
class TrackingAdmin(UniqueModelAdmin):
pass
@admin.register(AppsBanner)
class AppsBannerAdmin(admin.ModelAdmin):
formfield_overrides = SmartModelAdmin.formfield_overrides
form = AppsBannerForm