Django模型中的紧耦合

时间:2018-03-15 14:45:34

标签: python django django-models single-responsibility-principle

我的django模型包含incident_typeclosed字段。根据这些字段,我想返回渲染一些文本的函数。

在模型中使用这种get_renderer方法是否可以,或者我应该将此逻辑移到其他地方?据我了解,这种方法违反了单一责任原则。

class Incident(models.Model):
    BAD_RESPONSE = 'bad_response'
    SLOW_RESPONSE = 'slow_response'
    INCIDENT_TYPE_CHOICES = (
        (BAD_RESPONSE, 'Webpage is not available'),
        (SLOW_RESPONSE, 'Webpage is slow'),
    )

    incident_type = models.CharField(max_length=50, choices=INCIDENT_TYPE_CHOICES)
    closed = models.BooleanField()

    def get_renderer(self):
        if self.incident_type == self.BAD_RESPONSE:
            if self.closed:
                return render_page_up_screen
            else:
                return render_page_down_screen

1 个答案:

答案 0 :(得分:2)

我认为在视图层中的某处找到此方法会更合适。保持模型与Web和渲染相关概念松散耦合通常是很好的做法。它使模型更灵活,更适应变化。

get_renderer()移到您的视图中应该是直截了当的吗?它仍然可以通过indicdent_type实例访问closedIndcident字段以进行呈现决策。