我的团队中的某个人在我们的人员模型上编写了一个方法(一个'用户的扩展名,虽然它不是从用户继承的):
class Person(models.Model):
@staticmethod
def from_user(user):
try:
return Person.objects.get(username=user.username)
except ObjectDoesNotExist:
return None
理论上,Person.from_user(request.user)
应该返回正确的Person。相反,我得到了AttributeError: 'NoneType' object has no attribute 'objects'
。
我是静态方法的新手,所以我可能会遗漏一些东西 - 但在我看来,这是不可能的。在其他方面很容易解决;我只是想知道是否有任何真正的方法让Person方法返回像这样的Person实例,如果我应该修复这个方法或者只是抛弃它。
编辑:如果我跳转到PDB并导入模型,Person.objects.get(username=user.username)
按预期工作。无法看到Person被设置为None的方式或位置。
答案 0 :(得分:3)
您展示的代码不应该抛出错误:它完全有效。
然而,更好的方法是使用classmethod而不是staticmethod。类方法的要点是它自动传递类本身,您可以在方法中使用它:
@classmethod
def from_user(cls, user):
return cls.objects.get(username=user.username)