Django 模型中的紧耦合

Tight coupling in Django models

我有一个包含 incident_typeclosed 字段的 Django 模型。基于此字段,我想要 return 函数来呈现一些文本。

在模型中使用这样的 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

我认为将此方法放在视图层的某个位置会更合适。使您的模型与网络和渲染相关概念保持松散耦合通常是一种很好的做法。它使模型保持灵活性,更能适应变化。

get_renderer() 移动到您的视图中应该很简单?它仍然可以通过 Indcident 实例访问 indicdent_typeclosed 字段来做出渲染决定。