python - 我什么时候应该在模型中创建方法
问题描述
我有模型帖子,我正在制作这样的查询集
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 类中?创建帖子后是否可以自动调用此功能?
解决方案
是的,您可以将类相关方法放入 Model 类中。或者您可以使用模型管理器。
管理器是向 Django 模型提供数据库查询操作的接口。Django 应用程序中的每个模型至少存在一个管理器。管理器类的工作方式记录在制作查询中;本文档特别涉及自定义 Manager 行为的模型选项。
推荐阅读
- angular - 计算变化时所有角度反应输入的总量
- javascript - 如何在 c3.js 中将 x 轴标签向左或负旋转?
- jenkins - 詹金斯构建超时
- node.js - AWS 拉姆达。docClient.query 调用不会更新现有的外部变量
- python - repr 的不同实现
- python - 在一个位置将列插入数据框正在更改所有列,甚至插入都不正确
- r - R中数据框的子集
- python - 如何使用 pandas 数据框对数据进行反规范化
- node.js - 从 rc.local 为 NodeJs 永远运行
- angularjs - 如何在使用ui-router加载angularjs应用程序中的默认状态之前等待身份验证检查