diff --git a/aleksis/core/migrations/0010_dashboardwidget_broken.py b/aleksis/core/migrations/0010_dashboardwidget_broken.py new file mode 100644 index 0000000000000000000000000000000000000000..ca49d4e15837270f9658936e3f7bdaa66fbcd758 --- /dev/null +++ b/aleksis/core/migrations/0010_dashboardwidget_broken.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2021-02-19 13:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0009_default_dashboard'), + ] + + operations = [ + migrations.AddField( + model_name='dashboardwidget', + name='broken', + field=models.BooleanField(default=False, verbose_name='Widget is broken'), + ), + ] diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 24b6c8ca1c5f18889679d9c81b972eaac6cd72c4..04bc77b7a6f3e89a345bd2e54f60e0842bfed296 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -698,10 +698,12 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel): return media template = None + template_broken = None media = Media() title = models.CharField(max_length=150, verbose_name=_("Widget Title")) active = models.BooleanField(verbose_name=_("Activate Widget")) + broken = models.BooleanField(verbose_name=_("Widget is broken"), default=False) size_s = models.PositiveSmallIntegerField( verbose_name=_("Size on mobile devices"), @@ -736,8 +738,13 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel): """Get template. Get the template to render the widget with. Defaults to the template attribute, - but can be overridden to allow more complex template generation scenarios. + but can be overridden to allow more complex template generation scenarios. If + the widget is marked as broken, the template_broken attribute will be returned. """ + if not self.template: + raise NotImplementedError("A widget subclass needs to define a template.") + if self.broken and self.template_broken: + return self.template_broken return self.template def __str__(self):