39649-vm/core/forms.py
2026-04-15 16:15:01 +00:00

72 lines
3.0 KiB
Python

from django import forms
from .models import PostizInstallBrief
class PostizInstallBriefForm(forms.ModelForm):
class Meta:
model = PostizInstallBrief
fields = [
"title",
"public_url",
"node_version",
"package_manager",
"postgres_ready",
"redis_ready",
"temporal_ready",
"email_provider",
"upload_strategy",
"notes",
]
widgets = {
"title": forms.TextInput(
attrs={
"class": "form-control form-control-lg",
"placeholder": "Hosted Postiz workspace",
}
),
"public_url": forms.URLInput(
attrs={
"class": "form-control form-control-lg",
"placeholder": "https://your-machine.example.com",
}
),
"node_version": forms.Select(attrs={"class": "form-select"}),
"package_manager": forms.Select(attrs={"class": "form-select"}),
"email_provider": forms.Select(attrs={"class": "form-select"}),
"upload_strategy": forms.Select(attrs={"class": "form-select"}),
"notes": forms.Textarea(
attrs={
"class": "form-control",
"rows": 5,
"placeholder": "Optional notes about ports, reverse proxy decisions, or missing credentials.",
}
),
"postgres_ready": forms.CheckboxInput(attrs={"class": "form-check-input"}),
"redis_ready": forms.CheckboxInput(attrs={"class": "form-check-input"}),
"temporal_ready": forms.CheckboxInput(attrs={"class": "form-check-input"}),
}
help_texts = {
"title": "A friendly name for this VM install brief.",
"public_url": "Use the public URL already attached to this machine.",
"node_version": "Postiz development requires Node.js 18 or newer.",
"package_manager": "pnpm is the default workflow in the development guide.",
"postgres_ready": "Check this if PostgreSQL is already available on the VM.",
"redis_ready": "Check this if Redis is already available on the VM.",
"temporal_ready": "Check this if the Temporal stack is already reachable.",
"email_provider": "Pick the first email path you expect to configure.",
"upload_strategy": "Choose how uploaded files should be stored initially.",
}
def clean_title(self):
title = self.cleaned_data["title"].strip()
if len(title) < 3:
raise forms.ValidationError("Use at least 3 characters so the brief is recognizable.")
return title
def clean_public_url(self):
public_url = self.cleaned_data["public_url"].strip()
if not public_url.startswith(("http://", "https://")):
raise forms.ValidationError("Include http:// or https:// so the reverse-proxy target is unambiguous.")
return public_url