首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Django)我的模型管理方法应该在哪里?

(Django)我的模型管理方法应该在哪里?
EN

Stack Overflow用户
提问于 2016-06-09 08:40:25
回答 1查看 90关注 0票数 0

情况

我正在使用Django制作我的网站。我想把它弄得很有条理。

Djangodjango.contrib.models中提供了UserGroup

在我的应用程序board中,有Board模型。

每个Board对每个Group of User具有可访问的、可读的、可注释的、可写的权限。这是由一个额外的模型管理的,BoardPermission是由Group模型中的ManyToManyField(auth.User, through='BoardPermission')相关的。

因此,在db中,BoardPermission有4个字段:idboard_idgroup_idpermissionpermission的值由0(可访问)、1(可读)、2(注释)、3(可写)设置。

问题

现在,问题是:

例如,如果用户输入了名为notice (http://example.com/board/notice/)的典型板,服务器必须检查用户的权限。或者,在主页上,用户可以看到用户可以访问的板的预览,在这种情况下,服务器应该知道--给定用户可以看到的板列表。

为了处理以上两种情况,我想做一个方法,has_permission(self, user, board, permission)get_permitted_user_list(self, user, permission)

那么,这两种方法应该在哪里呢?在modelview

案例1)模型中的实现

权限是BoardGroup之间的关系,而不是User。处理QuerySet只是可以在Board对象中完成。我很难从BoardGroup之间的关系中得到BoardGroup之间的关系。

我检查了ModelManager,但我不知道如何通过使用经理来解决这个问题。

案例2)视图中的实现

有两个简单的问题: 1)这些方法得到了广泛的应用,在典型的观点中,实现似乎是而不是结构化的,或者换句话说,遵循DjangoPython的哲学。2)在各个方面,这些方法都是针对Models的,因为它们处理的是模型之间的关系。所以我觉得应该是模型层。

此外,如果视图中的实现是一个标准,那么为什么Model层中有Model呢?

摘要(可以忘记上述所有讨论)

Django MVT**.但是data 无处不在。

Model中的方法(处理数据)可以在View中调用。即使在没有参数的Template中!

当然,这种方法可以放在View中。

M,V,T的角色区别的基本标准是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 08:49:05

我的解决方案是在BoardManagerBoardQuerySet中有一个BoardQuerySet方法(取决于您决定作为开发的基础,每个方法都可以从另一个自动配置/生成)。

您将能够将其与其他管理器方法链接起来,因此过滤、查找等将有效,并且您将能够对Board.DoesNotExist异常使用视图的默认行为。

代码语言:javascript
运行
复制
Board.objects.published().recent().available_for(user).filter(name=name)[:1].get()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37720901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档