sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #07948
[Merge] ~ack/maas:big-auto-field-default into maas:master
Alberto Donato has proposed merging ~ack/maas:big-auto-field-default into maas:master.
Commit message:
switch IDs defaults from AutoField to BigAutoField
This also adds a manual migration to ignore FKs for unmanaged Discovery model, which otherwise breaks migrations
Requested reviews:
MAAS Maintainers (maas-maintainers)
For more details, see:
https://code.launchpad.net/~ack/maas/+git/maas/+merge/442177
--
Your team MAAS Maintainers is requested to review the proposed merge of ~ack/maas:big-auto-field-default into maas:master.
diff --git a/src/maasserver/djangosettings/settings.py b/src/maasserver/djangosettings/settings.py
index 1e7ccea..697d480 100644
--- a/src/maasserver/djangosettings/settings.py
+++ b/src/maasserver/djangosettings/settings.py
@@ -272,7 +272,7 @@ MIDDLEWARE = (
ROOT_URLCONF = "maasserver.djangosettings.urls"
-DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
+DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
MIGRATION_MODULES = {
# Migrations for MAAS >=2.0.
diff --git a/src/maasserver/migrations/maasserver/0301_discovery_ignore_fks.py b/src/maasserver/migrations/maasserver/0301_discovery_ignore_fks.py
new file mode 100644
index 0000000..9437f40
--- /dev/null
+++ b/src/maasserver/migrations/maasserver/0301_discovery_ignore_fks.py
@@ -0,0 +1,21 @@
+# Generated by Django 3.2.12 on 2023-05-01 16:08
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("maasserver", "0300_current_script_set_foreign_keys_readd"),
+ ]
+
+ operations = [
+ migrations.RemoveField(model_name="discovery", name="neighbour"),
+ migrations.RemoveField(model_name="discovery", name="mdns"),
+ migrations.RemoveField(model_name="discovery", name="observer"),
+ migrations.RemoveField(
+ model_name="discovery", name="observer_interface"
+ ),
+ migrations.RemoveField(model_name="discovery", name="fabric"),
+ migrations.RemoveField(model_name="discovery", name="vlan"),
+ migrations.RemoveField(model_name="discovery", name="subnet"),
+ ]
diff --git a/src/maasserver/migrations/maasserver/0302_big_auto_field.py b/src/maasserver/migrations/maasserver/0302_big_auto_field.py
new file mode 100644
index 0000000..73ebf4f
--- /dev/null
+++ b/src/maasserver/migrations/maasserver/0302_big_auto_field.py
@@ -0,0 +1,781 @@
+# Generated by Django 3.2.12 on 2023-05-02 07:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("maasserver", "0301_discovery_ignore_fks"),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name="domain",
+ options={},
+ ),
+ migrations.AlterField(
+ model_name="blockdevice",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bmc",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bmcroutablerackcontrollerrelationship",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bootresource",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bootresourcefile",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bootresourceset",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bootsource",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bootsourcecache",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="bootsourceselection",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="cacheset",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="config",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="dhcpsnippet",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="dnsdata",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="dnspublication",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="dnsresource",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="domain",
+ name="id",
+ field=models.AutoField(primary_key=True, serialize=False),
+ ),
+ migrations.AlterField(
+ model_name="event",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="eventtype",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="fabric",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="filestorage",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="filesystem",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="filesystemgroup",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="forwarddnsserver",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="globaldefault",
+ name="id",
+ field=models.AutoField(primary_key=True, serialize=False),
+ ),
+ migrations.AlterField(
+ model_name="interface",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="interfacerelationship",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="iprange",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="keysource",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="largefile",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="licensekey",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="mdns",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="neighbour",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="node",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodeconfig",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodedevice",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodedevicevpd",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodegrouptorackcontroller",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodekey",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodemetadata",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nodeuserdata",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="notification",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="notificationdismissal",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="numanode",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="numanodehugepages",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="ownerdata",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="packagerepository",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="partition",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="partitiontable",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="podhints",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="podstoragepool",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rbaclastsync",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rbacsync",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="rdns",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="regioncontrollerprocess",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="regioncontrollerprocessendpoint",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="regionrackrpcconnection",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="resourcepool",
+ name="id",
+ field=models.AutoField(primary_key=True, serialize=False),
+ ),
+ migrations.AlterField(
+ model_name="rootkey",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="script",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="scriptresult",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="scriptset",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="service",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="space",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="sshkey",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="sslkey",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="staticipaddress",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="staticroute",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="subnet",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="tag",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="template",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="userprofile",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="versionedtextfile",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="virtualmachine",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="virtualmachinedisk",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="virtualmachineinterface",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="vlan",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="vmcluster",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="zone",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ]
diff --git a/src/maasserver/migrations/piston3/0004_big_auto_field.py b/src/maasserver/migrations/piston3/0004_big_auto_field.py
new file mode 100644
index 0000000..6715ffd
--- /dev/null
+++ b/src/maasserver/migrations/piston3/0004_big_auto_field.py
@@ -0,0 +1,42 @@
+# Generated by Django 3.2.12 on 2023-05-02 07:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("piston3", "0003_piston_nonce_index"),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name="consumer",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="nonce",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="token",
+ name="id",
+ field=models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ]
diff --git a/src/maasserver/models/domain.py b/src/maasserver/models/domain.py
index a793e01..5dccc9f 100644
--- a/src/maasserver/models/domain.py
+++ b/src/maasserver/models/domain.py
@@ -18,7 +18,13 @@ import re
from django.core.exceptions import PermissionDenied, ValidationError
from django.core.validators import RegexValidator
-from django.db.models import BooleanField, Manager, PositiveIntegerField, Q
+from django.db.models import (
+ AutoField,
+ BooleanField,
+ Manager,
+ PositiveIntegerField,
+ Q,
+)
from django.db.models.query import QuerySet
from netaddr import IPAddress
@@ -172,12 +178,11 @@ class Domain(CleanSave, TimestampedModel):
:ivar objects: An instance of the class :class:`DomainManager`.
"""
- class Meta:
- verbose_name = "Domain"
- verbose_name_plural = "Domains"
-
objects = DomainManager()
+ # explicitly define the AutoField since default is BigAutoField which
+ # doesn't allow 0 as a value (used for the default domain)
+ id = AutoField(primary_key=True)
name = DomainNameField(
max_length=256,
editable=True,
diff --git a/src/maasserver/models/globaldefault.py b/src/maasserver/models/globaldefault.py
index e84a501..8bf5991 100644
--- a/src/maasserver/models/globaldefault.py
+++ b/src/maasserver/models/globaldefault.py
@@ -6,7 +6,7 @@
from datetime import datetime
-from django.db.models import ForeignKey, Manager, PROTECT
+from django.db.models import AutoField, ForeignKey, Manager, PROTECT
from maasserver.enum import ALLOCATED_NODE_STATUSES, NODE_STATUS
from maasserver.models.cleansave import CleanSave
@@ -37,6 +37,10 @@ class GlobalDefault(CleanSave, TimestampedModel):
objects = GlobalDefaultManager()
+ # explicitly define the AutoField since default is BigAutoField which
+ # doesn't allow 0 as a value
+ id = AutoField(primary_key=True)
+
domain = ForeignKey(
Domain, null=False, blank=False, editable=True, on_delete=PROTECT
)
diff --git a/src/maasserver/models/resourcepool.py b/src/maasserver/models/resourcepool.py
index c6bc314..fed6f34 100644
--- a/src/maasserver/models/resourcepool.py
+++ b/src/maasserver/models/resourcepool.py
@@ -12,7 +12,7 @@ __all__ = [
from datetime import datetime
from django.core.exceptions import PermissionDenied, ValidationError
-from django.db.models import CharField, Manager, TextField
+from django.db.models import AutoField, CharField, Manager, TextField
from maasserver.fields import MODEL_NAME_VALIDATOR
from maasserver.models.cleansave import CleanSave
@@ -108,6 +108,9 @@ class ResourcePool(CleanSave, TimestampedModel):
objects = ResourcePoolManager()
+ # explicitly define the AutoField since default is BigAutoField which
+ # doesn't allow 0 as a value (used for the default resource pool)
+ id = AutoField(primary_key=True)
name = CharField(
max_length=256,
unique=True,
diff --git a/src/maasserver/models/rootkey.py b/src/maasserver/models/rootkey.py
index a4238ee..96122a6 100644
--- a/src/maasserver/models/rootkey.py
+++ b/src/maasserver/models/rootkey.py
@@ -4,7 +4,7 @@
"""RootKey model."""
-from django.db.models import BigAutoField, DateTimeField
+from django.db.models import DateTimeField
from maasserver.models.timestampedmodel import TimestampedModel
@@ -12,5 +12,4 @@ from maasserver.models.timestampedmodel import TimestampedModel
class RootKey(TimestampedModel):
"""A root key for signing macaroons."""
- id = BigAutoField(primary_key=True, verbose_name="ID")
expiration = DateTimeField()
Follow ups