通过使用代理模型来解决每个模型只能注册一次的事实,我找到了一种实现我想要的方法。
class PostAdmin(admin.ModelAdmin): list_display = ('title', 'pubdate','user')class MyPost(Post): class meta: proxy = Trueclass MyPostAdmin(PostAdmin): def get_queryset(self, request): return self.model.objects.filter(user = request.user)admin.site.register(Post, PostAdmin)admin.site.register(MyPost, MyPostAdmin)然后,默认
PostAdmin网址为
/admin/myapp/post,用户拥有的帖子列表位于
/admin/myapp/myposts。
看完http://pre.djangoproject.com/wiki/DynamicModels之后,我想出了以下函数实用程序函数来做同样的事情:
def create_modeladmin(modeladmin, model, name = None): class meta: proxy = True app_label = model._meta.app_label attrs = {'__module__': '', 'meta': meta} newmodel = type(name, (model,), attrs) admin.site.register(newmodel, modeladmin) return modeladmin可以如下使用:
class MyPostAdmin(PostAdmin): def get_queryset(self, request): return self.model.objects.filter(user = request.user)create_modeladmin(MyPostAdmin, name='my-posts', model=Post)



