forked from Fediversity/Fediversity
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:
parent
4273c7a608
commit
1076552f75
2 changed files with 48 additions and 0 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue