我有一个项目有2个不同的应用程序。一个处理网站的性能指标,另一个估计网站的工作量。工作负载应用程序对性能应用程序有一些依赖性。但是,我试图避免从度量标准应用程序创建依赖关系到工作负载应用程序,以便更好地将度量标准应用程序封装为独立应用程序。例如,指标具有此模型:
# models.py in metrics app:
class Site(models.Model):
site_name = models.CharField(max_length=255)
site_geography = models.CharField(max_length=255)
slug = AutoSlugField(populate_from='site_name', unique=True, null=True)
Workload app有一些对象,例如(为简洁起见,省略了一些):
# models.py in workload app:
class Resource (models.Model):
name_first = models.CharField(max_length=60)
name_last = models.CharField(max_length=60)
address_street = models.CharField(max_length=80, blank=True)
address_city = models.CharField(max_length=40, blank=True)
address_state = models.CharField(max_length=2, blank=True)
sites = models.ManyToManyField(metrics_models.Site, through='ResourceSiteRelationship', blank=True, related_name='resources')
class Activity (models.Model):
activity_name = models.CharField(max_length=255)
hours = models.DecimalField(max_digits=5, decimal_places=2)
travel = models.BooleanField()
description = models.TextField(blank=True)
class ResourceSiteRelationship (models.Model):
roles = models.ManyToManyField(Role, blank=True, related_name='resource_site_relationships')
resource = models.ForeignKey(Resource, on_delete=models.CASCADE, blank=True, null=True, related_name='resource_site_relationships')
site = models.ForeignKey(metrics_models.Site, on_delete=models.CASCADE, blank=True, null=True, related_name='resource_site_relationships')
网站还应具有以下字段关系:
activities = models.ManyToManyField(Activity, related_name='sites', blank=True)
最好将该字段添加到指标应用的网站实例中吗?是否更好地在工作负载应用程序中为Site创建一对一类并且扩展如下:
class Site(models.Model):
site = models.OneToOneField(metrics_models.Site, on_delete=models.CASCADE)
activities = models.ManyToManyField(Activity, related_name='sites', blank=True)
或者还有另一种方法吗?