首页 > 解决方案 > 我什么时候应该在模型中创建方法

问题描述

我有模型帖子,我正在制作这样的查询集

user = CustomUser.objects.get(username=user)
blocked_users = user.blocked.all()
posts_except_blocked = Post.objects.exclude(author__in=blocked_users).order_by('-pub_date')

和一些类似的。但我认识到我可以将它作为@staticmethod 放入模型类中,现在它正在寻找

@staticmethod
def get_posts_except_blocked(user):
    user = CustomUser.objects.get(username=user)
    blocked_users = user.blocked.all()
    return Post.objects.exclude(author__in=blocked_users).order_by('-pub_date')

我应该把每个这样的查询都放在模型中吗?我有视图方法

def create_notifications(post):
    for word in post.content_post.split():
        if '@' in word:
            user_to_notificate = CustomUser.objects.get(username=word[1:])
            TalkAbout(where=post, _from=post.author, to=user_to_notificate).save()

我在保存帖子表单以创建通知后调用它。这可以在视图中还是我也需要将它放在 Post 类中?创建帖子后是否可以自动调用此功能?

标签: pythondjango

解决方案


是的,您可以将类相关方法放入 Model 类中。或者您可以使用模型管理器。

管理器是向 Django 模型提供数据库查询操作的接口。Django 应用程序中的每个模型至少存在一个管理器。管理器类的工作方式记录在制作查询中;本文档特别涉及自定义 Manager 行为的模型选项。

Django 官方文档中的经理

什么是 Djnago stackoverflow 中的 Manager 答案


推荐阅读