Coverage for cluster / models.py: 93%
30 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1"""
2All models for our cluster module
3Current only one model is defined:
4 1. ***Model*** - Main model for cluster - best imported as
5 from cluster.models import Model as ClusterModel
6"""
8from django.db import models
9from django.urls import reverse
10from simple_history.models import HistoricalRecords
11from clustersoftware.models import Model as ClustersoftwareModel
12from django.contrib.auth.models import Group
14from . import app_label
16# === Model for cluster ===
19class ModelManager(models.Manager):
20 def get_by_natural_key(self, name):
21 return self.get(name=name)
24class Model(models.Model):
25 """
26 The Model class in 'cluster', defined the cluster model.
27 Clusters have several servers (reverse related via Model in 'server'
28 Each cluster has the following fields:
29 name - how the cluster is named
30 clustersoftware - relation to clustersoftware model
31 group - the (user) group this cluster belongs to
32 """
34 name = models.CharField(max_length=45, unique=True)
35 clustersoftware = models.ForeignKey(
36 ClustersoftwareModel,
37 related_name="%s_set" % app_label,
38 related_query_name="%s" % app_label,
39 blank=True,
40 null=True,
41 on_delete=models.PROTECT,
42 )
44 group = models.ForeignKey(
45 Group, editable=False, blank=True, null=True, on_delete=models.PROTECT
46 )
48 history = HistoricalRecords()
50 objects = ModelManager()
52 # === natural_key ===
53 def natural_key(self):
54 return (self.name,)
56 @classmethod
57 def get_natural_key_fields(cls):
58 return ["name"]
60 @classmethod
61 def get_natural_key_info(cls):
62 return [("name", None)]
64 # === __str__ ===
65 def __str__(self):
66 return "%s" % (self.name)
68 # === get_absolute_url ===
69 def get_absolute_url(self):
70 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
72 # === Class meta data ===
73 class Meta:
74 db_table = "{}_{}".format("sm", app_label)
75 constraints = [
76 models.UniqueConstraint(
77 fields=["name", "group"], name="unique_sm_cluster_name_group"
78 )
79 ]