Various small model fixes

This commit is contained in:
Tobias Kunze 2025-03-16 09:44:30 +01:00
parent 9373680612
commit 5a08fcad6b
2 changed files with 167 additions and 103 deletions

View file

@ -1,95 +1,19 @@
# Generated by Django 5.2b1 on 2025-03-16 08:05
# Generated by Django 5.2b1 on 2025-03-16 08:44
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
import servala.core.models.user
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
dependencies = []
operations = [
migrations.CreateModel(
name="BillingEntity",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="Name")),
(
"description",
models.TextField(blank=True, verbose_name="Description"),
),
(
"erp_reference",
models.CharField(
blank=True, max_length=100, verbose_name="ERP reference"
),
),
],
),
migrations.CreateModel(
name="CloudProvider",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="Name")),
(
"description",
models.TextField(blank=True, verbose_name="Description"),
),
(
"logo",
models.ImageField(
blank=True,
null=True,
upload_to="public/service_providers",
verbose_name="Logo",
),
),
(
"external_links",
models.JSONField(blank=True, verbose_name="External links"),
),
],
),
migrations.CreateModel(
name="OrganizationOrigin",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="Name")),
(
"description",
models.TextField(blank=True, verbose_name="Description"),
),
],
),
migrations.CreateModel(
name="User",
fields=[
@ -151,7 +75,101 @@ class Migration(migrations.Migration):
),
],
options={
"abstract": False,
"verbose_name": "User",
"verbose_name_plural": "Users",
},
managers=[
("objects", servala.core.models.user.UserManager()),
],
),
migrations.CreateModel(
name="BillingEntity",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="Name")),
(
"description",
models.TextField(blank=True, verbose_name="Description"),
),
(
"erp_reference",
models.CharField(
blank=True, max_length=100, verbose_name="ERP reference"
),
),
],
options={
"verbose_name": "Billing entity",
"verbose_name_plural": "Billing entities",
},
),
migrations.CreateModel(
name="CloudProvider",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="Name")),
(
"description",
models.TextField(blank=True, verbose_name="Description"),
),
(
"logo",
models.ImageField(
blank=True,
null=True,
upload_to="public/service_providers",
verbose_name="Logo",
),
),
(
"external_links",
models.JSONField(
blank=True, null=True, verbose_name="External links"
),
),
],
options={
"verbose_name": "Cloud provider",
"verbose_name_plural": "Cloud providers",
},
),
migrations.CreateModel(
name="OrganizationOrigin",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=100, verbose_name="Name")),
(
"description",
models.TextField(blank=True, verbose_name="Description"),
),
],
options={
"verbose_name": "Organization origin",
"verbose_name_plural": "Organization origins",
},
),
migrations.CreateModel(
@ -186,6 +204,10 @@ class Migration(migrations.Migration):
),
),
],
options={
"verbose_name": "Control plane",
"verbose_name_plural": "Control planes",
},
),
migrations.CreateModel(
name="Organization",
@ -210,6 +232,10 @@ class Migration(migrations.Migration):
),
),
],
options={
"verbose_name": "Organization",
"verbose_name_plural": "Organizations",
},
),
migrations.CreateModel(
name="OrganizationMembership",
@ -259,6 +285,10 @@ class Migration(migrations.Migration):
),
),
],
options={
"verbose_name": "Organization membership",
"verbose_name_plural": "Organization memberships",
},
),
migrations.AddField(
model_name="organization",
@ -318,6 +348,10 @@ class Migration(migrations.Migration):
),
),
],
options={
"verbose_name": "Service category",
"verbose_name_plural": "Service categories",
},
),
migrations.CreateModel(
name="Service",
@ -347,7 +381,9 @@ class Migration(migrations.Migration):
),
(
"external_links",
models.JSONField(blank=True, verbose_name="External links"),
models.JSONField(
blank=True, null=True, verbose_name="External links"
),
),
(
"category",
@ -359,6 +395,10 @@ class Migration(migrations.Migration):
),
),
],
options={
"verbose_name": "Service",
"verbose_name_plural": "Services",
},
),
migrations.CreateModel(
name="ServiceOffering",
@ -381,7 +421,7 @@ class Migration(migrations.Migration):
models.ManyToManyField(
related_name="offerings",
to="core.controlplane",
verbose_name="Control plane",
verbose_name="Control planes",
),
),
(
@ -390,7 +430,7 @@ class Migration(migrations.Migration):
on_delete=django.db.models.deletion.PROTECT,
related_name="offerings",
to="core.cloudprovider",
verbose_name="Providers",
verbose_name="Provider",
),
),
(
@ -399,10 +439,14 @@ class Migration(migrations.Migration):
on_delete=django.db.models.deletion.PROTECT,
related_name="offerings",
to="core.service",
verbose_name="Services",
verbose_name="Service",
),
),
],
options={
"verbose_name": "Service offering",
"verbose_name_plural": "Service offerings",
},
),
migrations.CreateModel(
name="Plan",
@ -421,9 +465,20 @@ class Migration(migrations.Migration):
"description",
models.TextField(blank=True, verbose_name="Description"),
),
("features", models.JSONField(verbose_name="Features")),
("pricing", models.JSONField(verbose_name="Pricing")),
("term", models.DurationField(verbose_name="Term")),
(
"features",
models.JSONField(blank=True, null=True, verbose_name="Features"),
),
(
"pricing",
models.JSONField(blank=True, null=True, verbose_name="Pricing"),
),
(
"term",
models.PositiveIntegerField(
help_text="Term in months", verbose_name="Term"
),
),
(
"service_offering",
models.ForeignKey(
@ -434,5 +489,9 @@ class Migration(migrations.Migration):
),
),
],
options={
"verbose_name": "Plan",
"verbose_name_plural": "Plans",
},
),
]

View file

@ -39,19 +39,20 @@ class Service(models.Model):
"""
name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description"))
logo = models.ImageField(
upload_to="public/services", blank=True, null=True, verbose_name=_("Logo")
)
# TODO schema
external_links = models.JSONField(blank=True, verbose_name=_("External links"))
category = models.ForeignKey(
to="ServiceCategory",
on_delete=models.PROTECT,
related_name="services",
verbose_name=_("Category"),
)
description = models.TextField(blank=True, verbose_name=_("Description"))
logo = models.ImageField(
upload_to="public/services", blank=True, null=True, verbose_name=_("Logo")
)
# TODO schema
external_links = models.JSONField(
null=True, blank=True, verbose_name=_("External links")
)
class Meta:
verbose_name = _("Service")
@ -96,7 +97,9 @@ class CloudProvider(models.Model):
null=True,
verbose_name=_("Logo"),
)
external_links = models.JSONField(blank=True, verbose_name=_("External links"))
external_links = models.JSONField(
null=True, blank=True, verbose_name=_("External links")
)
class Meta:
verbose_name = _("Cloud provider")
@ -114,10 +117,12 @@ class Plan(models.Model):
name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description"))
# TODO schema
features = models.JSONField(verbose_name=_("Features"))
features = models.JSONField(verbose_name=_("Features"), null=True, blank=True)
# TODO schema
pricing = models.JSONField(verbose_name=_("Pricing"))
term = models.DurationField(verbose_name=_("Term"))
pricing = models.JSONField(verbose_name=_("Pricing"), null=True, blank=True)
term = models.PositiveIntegerField(
verbose_name=_("Term"), help_text=_("Term in months")
)
service_offering = models.ForeignKey(
to="ServiceOffering",
on_delete=models.PROTECT,
@ -138,24 +143,24 @@ class ServiceOffering(models.Model):
A service offering, e.g. "PostgreSQL on AWS", "MinIO on GCP".
"""
description = models.TextField(blank=True, verbose_name=_("Description"))
service = models.ForeignKey(
to="Service",
on_delete=models.PROTECT,
related_name="offerings",
verbose_name=_("Services"),
verbose_name=_("Service"),
)
provider = models.ForeignKey(
to="CloudProvider",
on_delete=models.PROTECT,
related_name="offerings",
verbose_name=_("Providers"),
verbose_name=_("Provider"),
)
control_plane = models.ManyToManyField(
to="ControlPlane",
related_name="offerings",
verbose_name=_("Control plane"),
verbose_name=_("Control planes"),
)
description = models.TextField(blank=True, verbose_name=_("Description"))
class Meta:
verbose_name = _("Service offering")