Django在应用程序之间处理相关模型对象的最佳实践

时间:2016-06-09 21:42:18

标签: python django

我有一个项目有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)

或者还有另一种方法吗?

0 个答案:

没有答案