小编Pau*_*one的帖子

Django admin中相同模型的多个ModelAdmins /视图

如何为同一模型创建多个ModelAdmin,每个模型以不同方式自定义并链接到不同的URL?

假设我有一个名为Posts的Django模型.默认情况下,此模型的管理视图将列出所有Post对象.

我知道我可以通过设置list_display等变量或覆盖queryset我的ModelAdmin中的方法来以各种方式自定义页面上显示的对象列表,如下所示:

class MyPostAdmin(admin.ModelAdmin):
    list_display = ('title', 'pub_date')

    def queryset(self, request):
        request_user = request.user
        return Post.objects.filter(author=request_user)

admin.site.register(MyPostAdmin, Post)
Run Code Online (Sandbox Code Playgroud)

默认情况下,可以通过URL访问它/admin/myapp/post.但是我想拥有相同模型的多个视图/ ModelAdmins.例如/admin/myapp/post,列出所有帖子对象,并/admin/myapp/myposts列出属于该用户的/admin/myapp/draftpost所有帖子,并列出所有尚未发布的帖子.(这些只是示例,我的实际用例更复杂)

您不能为同一模型注册多个ModelAdmin(这会导致AlreadyRegistered异常).理想情况下,我希望在将所有内容放入单个ModelAdmin类并编写自己的"urls"函数的情况下实现此目的,以根据URL返回不同的查询集.

我已经看过Django源了,我看到这样的函数ModelAdmin.changelist_view可能以某种方式包含在我的urls.py中,但我不确定它究竟是如何工作的.

更新:我找到了一种做我想做的事情(见下文),但我仍然希望听到其他方法.

python django django-admin

145
推荐指数
1
解决办法
3万
查看次数

Angular sce.trustAsUrl和javascript hrefs

我正在尝试创建一个具有书签的页面,如下所示:

<a ng-href="{{getBookmarklet()}}">Bookmarklet</a>

function MyCtrl($scope) {
  $scope.getBookmarklet = function() {
     return 'javascript:alert(1)';
  }
}
Run Code Online (Sandbox Code Playgroud)

href被清理为不安全:javascript:alert(1).所以,我尝试过使用sce.trustAs来防止这种情况:

function MyCtrl($scope, $sce) {
  $scope.getBookmarklet = function() {
     return $sce.trustAsUrl('javascript:alert(1)');
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然在我的网址上获得"不安全"前缀.我也尝试过trustAsJs,没有运气.我不想在我的应用程序中使用compileProvider将javascript:URL列入白名单,只需允许这一个实例.

angularjs

5
推荐指数
1
解决办法
1298
查看次数

标签 统计

angularjs ×1

django ×1

django-admin ×1

python ×1