From c4f414166745e7ad102111f862b9af05d84f786f Mon Sep 17 00:00:00 2001 From: Jakub Olech Date: Mon, 28 Mar 2022 14:14:02 +0200 Subject: [PATCH] Add column settings to plugins --- binder/plugins/column_settings/__init__.py | 0 .../migrations/0001_initial.py | 32 +++++++++++++++++++ .../column_settings/migrations/__init__.py | 0 binder/plugins/column_settings/models.py | 16 ++++++++++ binder/plugins/column_settings/views.py | 19 +++++++++++ 5 files changed, 67 insertions(+) create mode 100644 binder/plugins/column_settings/__init__.py create mode 100644 binder/plugins/column_settings/migrations/0001_initial.py create mode 100644 binder/plugins/column_settings/migrations/__init__.py create mode 100644 binder/plugins/column_settings/models.py create mode 100644 binder/plugins/column_settings/views.py diff --git a/binder/plugins/column_settings/__init__.py b/binder/plugins/column_settings/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/binder/plugins/column_settings/migrations/0001_initial.py b/binder/plugins/column_settings/migrations/0001_initial.py new file mode 100644 index 00000000..2ff7261a --- /dev/null +++ b/binder/plugins/column_settings/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.12 on 2022-03-28 12:12 + +from django.conf import settings +import django.contrib.postgres.fields.jsonb +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='ColumnSetting', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('view', models.TextField()), + ('columns', django.contrib.postgres.fields.jsonb.JSONField()), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ['pk'], + 'abstract': False, + 'unique_together': {('user', 'view')}, + }, + ), + ] diff --git a/binder/plugins/column_settings/migrations/__init__.py b/binder/plugins/column_settings/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/binder/plugins/column_settings/models.py b/binder/plugins/column_settings/models.py new file mode 100644 index 00000000..238ea22c --- /dev/null +++ b/binder/plugins/column_settings/models.py @@ -0,0 +1,16 @@ +from django.db import models +from django.conf import settings + +from ...models import BinderModel + + +class ColumnSetting(BinderModel): + + user = models.ForeignKey( + settings.AUTH_USER_MODEL, on_delete=models.CASCADE, + related_name='+', + ) + view = models.TextField() + columns = models.JSONField() + class Meta(BinderModel.Meta): + unique_together = [('user', 'view')] diff --git a/binder/plugins/column_settings/views.py b/binder/plugins/column_settings/views.py new file mode 100644 index 00000000..4c73159a --- /dev/null +++ b/binder/plugins/column_settings/views.py @@ -0,0 +1,19 @@ +from django.db.models import Q + +from ...permissions.views import PermissionView +from .models import ColumnSetting + + +class ColumnSettingView(PermissionView): + + unwritable_fields = ['user'] + + model = ColumnSetting + + def _scope_view_own(self, request): + return Q(user=request.user) + + def _store(self, obj, values, request, **kwargs): + if obj.pk is None: + obj.user = request.user + return super()._store(obj, values, request, **kwargs)