我正在使用Django。
我有一个名为Agrument的模型。争论有双方和所有者。我有一个函数返回某个用户的最新参数的一面。
喜欢obj.get_current_side(用户名)
我已将此添加到实际的Argument模型中,如此
def get_current_side(self, user):
return self.argument_set.latest('pub_date').side
我开始认为这没有意义,因为可能没有参数的实例。这是一个我会使用类方法的地方吗?我想过创建一个util类,但我认为与Argument类关联是有意义的。
答案 0 :(得分:2)
在User
模型上使用实例方法会更有意义:
def get_current_side(self):
try:
return self.arguments.latest('pub_date').side
except User.DoesNotExist, e:
return None
您可以通过扩展User
模型来执行此操作,如下所述:
编辑:我不确定抛出哪个异常。
答案 1 :(得分:1)
这应该是自定义模型管理器上的方法:
# in models.py
class ArgumentManager(models.manager.Manager):
def get_current_side(self, user):
try:
return self.filter(user=user).latest('pub_date').side
except Argument.DoesNotExist:
return None
class Argument(models.Model):
# fields etc...
objects = ArgumentManager()
# Calling:
side = Argument.objects.get_current_side(user)
另外,您可以扩展contrib.auth.user
并在其上添加get_current_size()
。但是在我对Django非常有信心之前我不会搞乱它。
user
变量。
答案 2 :(得分:0)
我认为你所寻找的是模特经理。
Django docs on managers与管理员可以将函数添加到模型类而不是模型实例。