Coverage for cluster/models.py: 94%
32 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-24 19:06 +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
13from taggit.managers import TaggableManager
15from . import app_label
17# === Model for cluster ===
20class ModelManager(models.Manager):
21 def get_by_natural_key(self, name):
22 return self.get(name=name)
25class Model(models.Model):
26 """
27 The Model class in 'cluster', defined the cluster model.
28 Clusters have several servers (reverse related via Model in 'server'
29 Each cluster has the following fields:
30 name - how the cluster is named
31 clustersoftware - relation to clustersoftware model
32 group - the (user) group this cluster belongs to
33 """
35 name = models.CharField(max_length=45)
36 clustersoftware = models.ForeignKey(
37 ClustersoftwareModel,
38 related_name="%s_set" % app_label,
39 related_query_name="%s" % app_label,
40 blank=True,
41 null=True,
42 on_delete=models.PROTECT,
43 )
45 group = models.ForeignKey(
46 Group, editable=False, blank=True, null=True, on_delete=models.PROTECT
47 )
49 tags = TaggableManager(blank=True, related_name="cluster_tags")
51 history = HistoricalRecords()
53 objects = ModelManager()
55 # === natural_key ===
56 def natural_key(self):
57 return (self.name,)
59 @classmethod
60 def get_natural_key_fields(cls):
61 return ["name"]
63 @classmethod
64 def get_natural_key_info(cls):
65 return [("name", None)]
67 # === __str__ ===
68 def __str__(self):
69 return "%s" % (self.name)
71 # === get_absolute_url ===
72 def get_absolute_url(self):
73 return reverse("%s:detail" % app_label, kwargs={"pk": self.pk})
75 # === Class meta data ===
76 class Meta:
77 db_table = "{}_{}".format("sm", app_label)
78 constraints = [
79 models.UniqueConstraint(
80 fields=["name", "group"], name="unique_sm_cluster_name_group"
81 )
82 ]