class SiteContent(SeriailizerMixin, ClusterableModel): site = models.OneToOneField(get_app_site_string(), on_delete=models.SET_NULL, blank=True, null=True, related_name='site_content') logo = models.ForeignKey(get_image_model_string(), on_delete=models.SET_NULL, blank=True, null=True, related_name='site_logo') navigation = models.ManyToManyField(get_page_string(), ) footer_content = models.TextField() panels = [ FieldPanel('site'), ImageChooserPanel('logo'), FieldPanel('navigation'), FieldPanel('footer_content'), InlinePanel('social_media', label='Social Media links'), ] serialize_attrs = """
import pytest from django.apps import apps from django.conf import settings from django.core.files import File from cabins.core.cache import get_cached_class from cabins.front.models import SiteContent, SocialMedia from cabins.page import get_page_string from .core_fixtures import image_fixture Site = get_cached_class(settings.CORE_SITE_FINDER).get_model() Image = apps.get_model(settings.CORE_IMAGE_MODEL) Page = apps.get_model(get_page_string()) @pytest.fixture def image(db) -> Image: with open(image_fixture["file"], 'rb') as _file: file_data = File(_file) image = Image(title="test_home") image.file.save(name="test_home", content=file_data) image.save() @pytest.fixture def site(db) -> Site: return Site.objects.create(hostname="test.com", site_name="test", port=8000, root_page=Page.objects.filter(depth=1).first())
class Suitability(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='suitability_tags')
class Services(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='services_tags')
class NearByWater(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='nearbywater_tags')
class PropertySize(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='propertysize_tags')
class FoodDrink(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='food_drink_tags')
class General(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='amenities_general_tags')
class OpenDates(TaggedItemBase): content_object = ParentalKey(get_page_string(), on_delete=models.CASCADE, related_name='amenities_open_dates_tags')