summaryrefslogtreecommitdiff
path: root/ishtar_common/models_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-11-13 18:00:27 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:45:55 +0100
commit4426024156e1bff42cbd37f0c0e273c369c3773f (patch)
tree63d6ca4291f84f923f321fd62228334e7a8a97b7 /ishtar_common/models_common.py
parente3ec535182570e006cf48b92e9f9fc48cbe6a59e (diff)
downloadIshtar-4426024156e1bff42cbd37f0c0e273c369c3773f.tar.bz2
Ishtar-4426024156e1bff42cbd37f0c0e273c369c3773f.zip
🗃️ database: add sheet filters
🗃️ database: add sheet filters
Diffstat (limited to 'ishtar_common/models_common.py')
-rw-r--r--ishtar_common/models_common.py43
1 files changed, 41 insertions, 2 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py
index 9ad73f314..613c54fac 100644
--- a/ishtar_common/models_common.py
+++ b/ishtar_common/models_common.py
@@ -844,8 +844,8 @@ class TemplateItem:
return templates
-class SheetFilter(models.Model):
- key = models.CharField(_("Key"), max_length=200)
+class BaseSheetFilter(models.Model):
+ key = models.TextField(_("Key"), default="-")
class Meta:
abstract = True
@@ -873,6 +873,45 @@ class SheetFilter(models.Model):
return sorted(set(keys))
+class SheetFilter(BaseSheetFilter):
+ content_type = models.ForeignKey(
+ ContentType, related_name="content_type_sheetfilter", on_delete=models.CASCADE
+ )
+ exclude_or_include = models.CharField(
+ _("Exclude or include"),
+ default="E",
+ max_length=1,
+ choices=(("E", _("exclude")), ("I", _("Include")))
+ )
+
+ class Meta:
+ verbose_name = _("Sheet filter")
+ verbose_name_plural = _("Sheet filters")
+ ADMIN_SECTION = _("Account")
+
+ def get_template(self):
+ ct = self.content_type
+ model = apps.get_model(ct.app_label, ct.model)
+ tpl = loader.get_template(f"ishtar/sheet_{model.SLUG}.html")
+ return tpl.template.origin.name
+
+
+class FilteredSheet(models.Model):
+ name = models.CharField(_("Name"), max_length=200)
+ content_type = models.ForeignKey(
+ ContentType, related_name="content_type_filteredsheet", on_delete=models.CASCADE
+ )
+ filters = models.ManyToManyField(
+ SheetFilter, blank=True, verbose_name=_("Filters"),
+ related_name="filtered_sheet"
+ )
+
+ class Meta:
+ verbose_name = _("Filtered sheet")
+ verbose_name_plural = _("Filtered sheets")
+ ADMIN_SECTION = _("Account")
+
+
class FullSearch(models.Model):
search_vector = SearchVectorField(
_("Search vector"), blank=True, null=True, help_text=_("Auto filled at save")