在哪里放置在mod上有效的方法

2024-09-24 20:26:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我和Django一起工作。在

我有一个型号叫Agrument。争论有双方,也有所有者。我有一个函数,它返回某个用户最近参数的边。在

像目标获取当前的(用户名)

我把这个加入到实际的论证模型中

 def get_current_side(self, user):
        return self.argument_set.latest('pub_date').side

我开始认为这是没有道理的,因为可能没有一个论点的例子。这是一个我会用类方法的地方吗?我考虑过创建一个util类,但是我认为与参数类关联是有意义的。在


Tags: django函数用户模型self目标参数get
3条回答

我想你要找的是模特经理。在

Django docs on managers通过管理器,您可以将函数添加到模型类,而不是模型实例。在

这应该是自定义模型管理器上的方法:

# 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变量根本就没有用在OP的snipplet上。在

User模型上使用实例方法会更有意义:

def get_current_side(self):
    try:
        return self.arguments.latest('pub_date').side
    except User.DoesNotExist, e:
        return None

您可以通过扩展User模型来实现这一点,如下所述:

编辑:我不太确定引发哪个异常。

相关问题 更多 >