gpt4 book ai didi

django - 在模型函数中使用 Django 过滤器

转载 作者:行者123 更新时间:2023-12-03 23:55:59 25 4
gpt4 key购买 nike

模型的主要目的是包含业务逻辑,所以我希望我的大部分代码在 Django 模型中以方法的形式出现。例如,我想在任务模型中编写一个名为 get_tasks_by_user() 的方法。这样我就可以访问它了

Tasks.get_tasks_by_user(user_id)

以下是我的模型代码:

class Tasks(models.Model):
slug=models.URLField()
user=models.ForeignKey(User)
title=models.CharField(max_length=100)
objects=SearchManager()
def __unicode__(self):
return self.title
days_passed = property(getDaysPassed)
def get_tasks_by_user(self,userid):
return self.filters(user_id=userid)

但这似乎不起作用,我将其用作:

    tasks = Tasks.objects.get_tasks_by_user(user_id)

但它给出了以下错误:

'SearchManager' object has no attribute 'get_tasks_by_user'

如果我删除 objects=SearchManager,那么只有错误管理器的名称会改变,所以我认为这不是问题。好像我在做一些非常基本的错误,我该怎么做我想做的事?我知道我可以通过 :Tasks.objects.filters(user_id=userid) 做同样的事情,但我想将所有这些逻辑保留在模型中。这样做的正确方法是什么?

最佳答案

一个简单的方法是使用 classmethod装饰器使其成为类方法。 类任务内部:

@classmethod
def get_tasks_by_user(cls, userid):
return cls.objects.filters(user_id=userid)

这样你就可以简单地调用:

tasks = Tasks.get_tasks_by_user(user_id)

或者,您可以根据 Tom 的回答使用管理器。

要决定在您的具体情况下选择哪一个,您可以引用 James Bennett(Django 的发布经理)blog post on when to use managers/classmethod.

关于django - 在模型函数中使用 Django 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com