from django.db import models, transaction from django.urls import reverse_lazy from admin_ordering.models import OrderableModel from tinymce.models import HTMLField from django.utils.safestring import mark_safe buttons_help_text = """Tutaj można wpisać dowolną ilość przycisków w następującym formacie: tekst1 -> link teskt2 | link ... Symbol -> oznacza, że link będzie otwarty w nowej karcie Symbol | oznacza, że link będzie otwarty w tej samej karcie Na przykład: pzbs -> https://pzbs.pl fotogaleria | https://galeria.podlaskizbs.pl cezar -> https://www.msc.com.pl/cezar PZBS i Cezar zostaną otwarte w nowej karcie UWAGA !! Gdy nie podamy tekstu przyciku, nie pokaże on się, można to wykorzystać w taki sposób: -> link do wyników fotogaleria -> link do fotogalerii Wtedy pokaże się tylko przycisk fotogalerii """.replace( "\n", "
" ) class PublishableModel(models.Model): published = models.BooleanField("Wpis opublikowany", default=False) @classmethod def Published(cls): return cls.objects.filter(published=True) class Meta(): abstract = True class SingletonModel(PublishableModel): class Meta: abstract = True def save(self, *args, **kwargs): if not self.published: return super().save(*args, **kwargs) with transaction.atomic(): self.__class__.objects.filter(published=True).update(published=False) return super().save(*args, **kwargs) @classmethod def Get(cls): return cls.objects.filter(published=True).first() class PostableModel(PublishableModel, OrderableModel): reverse_href = "" show_title = models.BooleanField("Pokaż tytuł", default=True) title = models.CharField("Tytuł", default="", blank=True, max_length=250) content = HTMLField("Treść", default="", blank=True) buttons = models.TextField( "Przyciski", default="", blank=True, help_text=buttons_help_text ) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title or "(brak tytułu)" @property def link(self): href = reverse_lazy(self.reverse_href, args=[self.pk]) return mark_safe(f'{href}') class Meta(OrderableModel.Meta): abstract = True