forked from ungleich-public/dynamicweb
106 lines
3.3 KiB
Python
106 lines
3.3 KiB
Python
from functools import cached_property
|
|
|
|
from django.db import models
|
|
from django.urls import reverse
|
|
|
|
from cms.models import ContentAdminManager
|
|
from cms.models.fields import PlaceholderRelationField
|
|
from cms.utils import get_language_from_request
|
|
from cms.utils.placeholder import get_placeholder_from_slot
|
|
from cms.utils.urlutils import admin_reverse
|
|
|
|
|
|
def dynamic_placeholder_1(instance):
|
|
return instance.char_1
|
|
|
|
|
|
def dynamic_placeholder_2(instance):
|
|
return instance.char_2
|
|
|
|
|
|
class Example1(models.Model):
|
|
char_1 = models.CharField('char_1', max_length=255)
|
|
char_2 = models.CharField('char_2', max_length=255)
|
|
char_3 = models.CharField('char_3', max_length=255)
|
|
char_4 = models.CharField('char_4', max_length=255)
|
|
date_field = models.DateField(null=True)
|
|
placeholders = PlaceholderRelationField()
|
|
publish = models.BooleanField(default=True)
|
|
decimal_field = models.DecimalField(
|
|
max_digits=5, decimal_places=1,
|
|
blank=True, null=True,)
|
|
|
|
admin_manager = ContentAdminManager()
|
|
objects = models.Manager()
|
|
|
|
static_admin_url = ''
|
|
|
|
@cached_property
|
|
def placeholder(self):
|
|
return get_placeholder_from_slot(self.placeholders, "placeholder")
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def callable_item(self, request):
|
|
return self.char_1
|
|
|
|
def __str__(self):
|
|
return self.char_1
|
|
|
|
def get_absolute_url(self):
|
|
return reverse("example_detail", args=(self.pk,))
|
|
|
|
def set_static_url(self, request):
|
|
language = get_language_from_request(request)
|
|
if self.pk:
|
|
self.static_admin_url = admin_reverse('placeholderapp_example1_edit_field', args=(self.pk, language))
|
|
return self.pk
|
|
|
|
def dynamic_url(self, request):
|
|
language = get_language_from_request(request)
|
|
return admin_reverse('placeholderapp_example1_edit_field', args=(self.pk, language))
|
|
|
|
|
|
class TwoPlaceholderExample(models.Model):
|
|
char_1 = models.CharField('char_1', max_length=255)
|
|
char_2 = models.CharField('char_2', max_length=255)
|
|
char_3 = models.CharField('char_3', max_length=255)
|
|
char_4 = models.CharField('char_4', max_length=255)
|
|
|
|
placeholders = PlaceholderRelationField()
|
|
|
|
@cached_property
|
|
def placeholder_1(self):
|
|
return get_placeholder_from_slot(self.placeholders, "placeholder_1")
|
|
|
|
@cached_property
|
|
def placeholder_2(self):
|
|
return get_placeholder_from_slot(self.placeholders, "placeholder_2")
|
|
|
|
|
|
class DynamicPlaceholderSlotExample(models.Model):
|
|
char_1 = models.CharField('char_1', max_length=255)
|
|
char_2 = models.CharField('char_2', max_length=255)
|
|
|
|
placeholders = PlaceholderRelationField()
|
|
|
|
@cached_property
|
|
def placeholder_1(self):
|
|
return get_placeholder_from_slot(self.placeholders, dynamic_placeholder_1(self))
|
|
|
|
@cached_property
|
|
def placeholder_2(self):
|
|
return get_placeholder_from_slot(self.placeholders, dynamic_placeholder_2(self))
|
|
|
|
|
|
class CharPksExample(models.Model):
|
|
char_1 = models.CharField('char_1', max_length=255)
|
|
slug = models.SlugField('char_1', max_length=255, primary_key=True)
|
|
|
|
@cached_property
|
|
def placeholder_1(self):
|
|
return get_placeholder_from_slot(self.placeholders, "placeholder_1")
|
|
|
|
def __str__(self):
|
|
return f"{self.char_1} - {self.pk}"
|