作者:手机用户2502853557 | 来源:互联网 | 2022-11-30 21:37
有没有理由测试模型方法,或者我应该假设Django正常工作并让他们未经测试?
这是我的模型和几个方法:
class SlackTeam(models.Model):
...
def get_user(self, user_id):
return self.users.filter(user_id=user_id).first()
def deactivate(self):
self.active = False
self.initiator.access_token = ''
self.initiator.save()
self.initiator = None
self.deactivated_at = timezone.now()
self.save()
if hasattr(self, 'slackbot'):
self.slackbot.delete()
def set_initiator(self, user):
self.initiator = user
self.save(update_fields=['initiator'])
@classmethod
def initialize(cls, team_id, name):
return cls.objects.update_or_create(
team_id=team_id, defaults={'name': name})[0]
@classmethod
def get_by_team_id(cls, team_id):
return cls.objects.filter(team_id=team_id).first()
bruno desthu..
5
您可以放心地假设基models.Model
类上定义的方法有效.当然,你自己的方法 - 无论是自定义方法还是被覆盖方法 - 都必须进行测试.
作为旁注:Django模型的约定是定义在管理器上的表级工作的方法,而不是模型本身,因此至少应该在自定义管理器上定义get_by_team_id
并且可能initialize
应该定义.
1> bruno desthu..:
您可以放心地假设基models.Model
类上定义的方法有效.当然,你自己的方法 - 无论是自定义方法还是被覆盖方法 - 都必须进行测试.
作为旁注:Django模型的约定是定义在管理器上的表级工作的方法,而不是模型本身,因此至少应该在自定义管理器上定义get_by_team_id
并且可能initialize
应该定义.
从技术上讲,没有 - 但这是大多数Django开发人员所期望的.坚持使用约定可以使您的代码库更容易获得新手,因此请将其视为社交/可读性/可维护性改进(在管理器上使用表级方法可以明确哪些方法适用于实例,哪些方法适用于表级)而不是纯技术的.