2828from django .utils .translation import gettext_lazy as _
2929from jsonfield import JSONField
3030from translated_fields import TranslatedField
31-
3231from blue_krill .models .fields import EncryptField
3332
33+ from paas_service .fields import tenant_id_field_factory
34+
35+
3436# Base Models start
3537
3638
@@ -59,7 +61,10 @@ class Meta(object):
5961
6062
6163class SpecDefinition (UuidAuditedModel ):
62- """Specification definition"""
64+ """Specification definition
65+
66+ [multi-tenancy] This model is not tenant-aware.
67+ """
6368
6469 index = models .IntegerField (verbose_name = _ ('顺序' ), default = 0 )
6570 name = models .CharField (verbose_name = _ ('名称' ), unique = True , max_length = 64 , null = True )
@@ -81,7 +86,10 @@ def save(self, *args, **kwargs):
8186
8287
8388class Specification (UuidAuditedModel ):
84- """Specification value"""
89+ """Specification value
90+
91+ [multi-tenancy] This model is not tenant-aware.
92+ """
8593
8694 definition = models .ForeignKey (SpecDefinition , verbose_name = _ ('定义' ), on_delete = models .CASCADE )
8795 value = models .CharField (verbose_name = _ ('值' ), max_length = 64 )
@@ -101,7 +109,10 @@ def save(self, *args, **kwargs):
101109
102110
103111class Service (UuidAuditedModel ):
104- """Service model for PaaS"""
112+ """Service model for PaaS
113+
114+ [multi-tenancy] This model is not tenant-aware.
115+ """
105116
106117 name = models .CharField (verbose_name = '服务名称' , unique = True , max_length = 64 )
107118 category = models .IntegerField (verbose_name = '服务分类' )
@@ -134,11 +145,13 @@ class ServiceInstance(UuidAuditedModel):
134145
135146 service = models .ForeignKey ('Service' , verbose_name = '服务' , null = True , on_delete = models .SET_NULL )
136147 plan = models .ForeignKey (
137- 'Plan' , verbose_name = '方案' , null = True , help_text = "当前仅当迁移的增强服务实例, 会没有 plan" , on_delete = models .SET_NULL
148+ 'Plan' , verbose_name = '方案' , null = True , help_text = "当前仅当迁移的增强服务实例, 会没有 plan" ,
149+ on_delete = models .SET_NULL
138150 )
139151 config = JSONField (default = dict , blank = True )
140152 credentials = EncryptField (default = "" )
141153 to_be_deleted = models .BooleanField (default = False )
154+ tenant_id = tenant_id_field_factory ()
142155
143156 class Meta :
144157 verbose_name_plural = verbose_name = '服务实例'
@@ -174,6 +187,7 @@ class ServiceInstanceConfig(UuidAuditedModel):
174187
175188 instance = models .OneToOneField (ServiceInstance , verbose_name = '服务实例' , on_delete = models .CASCADE )
176189 paas_app_info = JSONField (default = dict , blank = True , verbose_name = '平台应用信息' )
190+ tenant_id = tenant_id_field_factory ()
177191
178192 def was_initialized (self ) -> bool :
179193 """Return if current config object was initialized"""
@@ -228,10 +242,11 @@ class Plan(UuidAuditedModel):
228242 service = models .ForeignKey ('Service' , related_name = 'plans' , verbose_name = '服务' , on_delete = models .CASCADE )
229243
230244 specifications = models .ManyToManyField (Specification , verbose_name = '规格' , blank = True )
245+ tenant_id = tenant_id_field_factory ()
231246
232247 class Meta :
233248 verbose_name_plural = verbose_name = '方案'
234- unique_together = ("service" , "name" )
249+ unique_together = ("tenant_id" , " service" , "name" )
235250
236251 def __str__ (self ):
237252 return f"{ self .name } -{ self .service .name } "
@@ -254,7 +269,10 @@ def full_specifications(self) -> Dict[str, Any]:
254269
255270
256271class ResourceId (models .Model ):
257- """utility model for avoiding name conflict"""
272+ """utility model for avoiding name conflict
273+
274+ [multi-tenancy] This model is not tenant-aware.
275+ """
258276
259277 namespace = models .CharField (max_length = 32 )
260278 uid = models .CharField (max_length = 64 , null = False , unique = True , db_index = True )
0 commit comments