Various small model fixes
This commit is contained in:
parent
9373680612
commit
5a08fcad6b
2 changed files with 167 additions and 103 deletions
|
@ -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",
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue