1
0
Fork 0

try a few ways to make form load/submit work, add stub on inline formsets to display nested forms

c.f.:

-
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets
- https://swapps.com/blog/working-with-nested-forms-with-django/
This commit is contained in:
kiara Grouwstra 2025-03-04 10:36:15 +01:00
parent 4273c7a608
commit 1076552f75
Signed by: kiara
SSH key fingerprint: SHA256:COspvLoLJ5WC5rFb9ZDe5urVCkK4LJZOsjfF4duRJFU
2 changed files with 48 additions and 0 deletions
panel/src/panel

View file

@ -1,4 +1,5 @@
from django import forms
# from django.forms import inlineformset_factory
from panel.models import (
Configuration,
PeertubeConfig,
@ -42,3 +43,5 @@ class PeertubeConfigForm(forms.ModelForm):
class Meta:
model = PeertubeConfig
fields = ['enable']
# BookInlineFormSet = inlineformset_factory(Deployment, MastodonConfigForm, extra=1, can_delete=False)

View file

@ -24,6 +24,38 @@ class PeertubeConfig(models.Model):
class Configuration(models.Model):
class ConfigurationManager(models.Manager):
# Define which related fields should be auto-created
auto_create_related = [
'mastodon',
'pixelfed',
'peertube',
]
def create(self, **kwargs):
# Create the model instance but don't save yet
instance = self.model(**kwargs)
# Auto-create any missing related objects
for field_name in self.auto_create_related:
# Skip if the field was provided
if field_name in kwargs:
continue
# Get the related model class
field = self.model._meta.get_field(field_name)
related_model = field.related_model
# Create the related object
related_obj = related_model.objects.create()
# Set the relation
setattr(instance, field_name, related_obj)
# Save and return the instance
instance.save()
return instance
operator = models.ForeignKey(
User,
on_delete=models.SET_NULL,
@ -48,3 +80,16 @@ class Configuration(models.Model):
mastodon = models.OneToOneField(MastodonConfig, on_delete=models.CASCADE, related_name='config', null=True)
pixelfed = models.OneToOneField(PixelfedConfig, on_delete=models.CASCADE, related_name='config', null=True)
peertube = models.OneToOneField(PeertubeConfig, on_delete=models.CASCADE, related_name='config', null=True)
# Use the custom manager
# objects = ConfigurationManager()
# def save(self, *args, **kwargs):
# # Create the related items if they don't exist
# if not hasattr(self, 'mastodon'):
# MastodonConfig.objects.create(config=self)
# if not hasattr(self, 'mastodon'):
# MastodonConfig.objects.create(config=self)
# if not hasattr(self, 'mastodon'):
# MastodonConfig.objects.create(config=self)
# super().save(*args, **kwargs)