Seperation of configuration form

This commit is contained in:
Lois Verheij 2025-02-26 11:19:25 +01:00
parent c7937ac705
commit 2429b37ee9
7 changed files with 158 additions and 8 deletions

View file

@ -1,4 +1,22 @@
from django.contrib import admin from django.contrib import admin
from panel.models import Configuration from panel.models import Configuration, PeertubeConfig, PixelfedConfig, MastodonConfig
admin.site.register(Configuration)
class MastodonConfigInline(admin.StackedInline):
model = MastodonConfig
class PixelfedConfigInline(admin.StackedInline):
model = PixelfedConfig
class PeertubeConfigInline(admin.StackedInline):
model = PeertubeConfig
class DeployFormModelServices(admin.ModelAdmin):
inlines = [MastodonConfigInline,
PixelfedConfigInline, PeertubeConfigInline]
admin.site.register(Configuration, DeployFormModelServices)

View file

@ -1,5 +1,5 @@
from django import forms from django import forms
from panel.models import Configuration from panel.models import Configuration, PeertubeConfig, PixelfedConfig, MastodonConfig
class Deployment(forms.ModelForm): class Deployment(forms.ModelForm):
@ -7,9 +7,6 @@ class Deployment(forms.ModelForm):
model = Configuration model = Configuration
fields = [ fields = [
'domain', 'domain',
'mastodon',
'pixelfed',
'peertube',
] ]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -20,3 +17,23 @@ class Deployment(forms.ModelForm):
(code, f"{operator}.{label}") (code, f"{operator}.{label}")
for code, label in self.instance._meta.get_field('domain').choices for code, label in self.instance._meta.get_field('domain').choices
] ]
model = Configuration
fields = ['domain']
class MastodonConfigForm(forms.ModelForm):
class Meta:
model = MastodonConfig
fields = ['mastodon']
class PixelfedConfigForm(forms.ModelForm):
class Meta:
model = PixelfedConfig
fields = ['pixelfed']
class PeertubeConfigForm(forms.ModelForm):
class Meta:
model = PeertubeConfig
fields = ['peertube']

View file

@ -0,0 +1,55 @@
# Generated by Django 4.2.16 on 2025-02-25 10:25
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('panel', '0002_deployformmodel_user'),
]
operations = [
migrations.RemoveField(
model_name='deployformmodel',
name='mastodon',
),
migrations.RemoveField(
model_name='deployformmodel',
name='peertube',
),
migrations.RemoveField(
model_name='deployformmodel',
name='pixelfed',
),
migrations.AlterField(
model_name='deployformmodel',
name='domain',
field=models.CharField(choices=[('fediversity_eu', 'fediversity.eu'), ('fediversity_net', 'fediversity.net')], max_length=255),
),
migrations.CreateModel(
name='PixelfedConfig',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('pixelfed', models.BooleanField(default=False)),
('deploy_form', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='panel.deployformmodel')),
],
),
migrations.CreateModel(
name='PeertubeConfig',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('peertube', models.BooleanField(default=False)),
('deploy_form', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='panel.deployformmodel')),
],
),
migrations.CreateModel(
name='MastodonConfig',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('mastodon', models.BooleanField(default=False)),
('deploy_form', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='panel.deployformmodel')),
],
),
]

View file

@ -0,0 +1,14 @@
# Generated by Django 4.2.16 on 2025-02-26 10:37
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('panel', '0003_remove_deployformmodel_mastodon_and_more'),
('panel', '0004_remove_configuration_user_configuration_enable_and_more'),
]
operations = [
]

View file

@ -2,7 +2,6 @@ from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
class Configuration(models.Model): class Configuration(models.Model):
operator = models.ForeignKey( operator = models.ForeignKey(
User, User,
@ -26,6 +25,30 @@ class Configuration(models.Model):
max_length=255, max_length=255,
) )
# TODO: map to configuration model per service # TODO: map to configuration model per service
class MastodonConfig(models.Model):
deploy_form = models.OneToOneField(
Configuration, on_delete=models.CASCADE)
mastodon = models.BooleanField(default=False) mastodon = models.BooleanField(default=False)
def __str__(self):
return f"Mastodon: {self.mastodon}"
class PixelfedConfig(models.Model):
deploy_form = models.OneToOneField(
Configuration, on_delete=models.CASCADE)
pixelfed = models.BooleanField(default=False) pixelfed = models.BooleanField(default=False)
def __str__(self):
return f"Pixelfed: {self.pixelfed}"
class PeertubeConfig(models.Model):
deploy_form = models.OneToOneField(
Configuration, on_delete=models.CASCADE)
peertube = models.BooleanField(default=False) peertube = models.BooleanField(default=False)
def __str__(self):
return f"Peertube: {self.peertube}"

View file

@ -3,6 +3,9 @@
<form method="post" enctype="multipart/form-data" action="{% url 'configuration_form' %}"> <form method="post" enctype="multipart/form-data" action="{% url 'configuration_form' %}">
{% csrf_token %} {% csrf_token %}
{{ form.as_p }} {{ form.as_p }}
{{ mastodon_form.as_p }}
{{ pixelfed_form.as_p }}
{{ peertube_form.as_p }}
</fieldset> </fieldset>

View file

@ -7,6 +7,8 @@ from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy from django.urls import reverse_lazy
from panel.models import Configuration from panel.models import Configuration
from panel import forms from panel import forms
from .models import Configuration, MastodonConfig, PixelfedConfig, PeertubeConfig
from .forms import Deployment, MastodonConfigForm, PixelfedConfigForm, PeertubeConfigForm
class Index(TemplateView): class Index(TemplateView):
@ -34,4 +36,22 @@ class ConfigurationForm(LoginRequiredMixin, UpdateView):
def get_object(self, queryset=None): def get_object(self, queryset=None):
obj, created = Configuration.objects.get_or_create( obj, created = Configuration.objects.get_or_create(
operator=self.request.user) operator=self.request.user)
return obj return obj
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
deploy_form = self.get_object()
mastodon_config, _ = MastodonConfig.objects.get_or_create(
deploy_form=deploy_form)
pixelfed_config, _ = PixelfedConfig.objects.get_or_create(
deploy_form=deploy_form)
peertube_config, _ = PeertubeConfig.objects.get_or_create(
deploy_form=deploy_form)
context['mastodon_form'] = MastodonConfigForm(instance=mastodon_config)
context['pixelfed_form'] = PixelfedConfigForm(instance=pixelfed_config)
context['peertube_form'] = PeertubeConfigForm(instance=peertube_config)
return context