首页 文章

Django Admin - 禁用特定模型的'Add'操作

提问于
浏览
112

我有一个django网站,有很多模型和表格 . 我有许多自定义表单和表单集以及内联表单集和自定义验证以及自定义查询集 . 因此,添加模型操作取决于需要其他事物的表单,以及django管理员中的“添加模型”,通过自定义查询集中的500 .

反正有没有为某些型号禁用“添加$ MODEL”功能?

我希望 /admin/appname/modelname/add/ 给出一个404(或合适的'go away'错误消息),我不要't want the '添加$ MODELNAME'按钮在 /admin/appname/modelname 视图上 .

Django admin提供了一种禁用管理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions)但是此模型的唯一操作是“delete_selected” . 即管理操作仅对现有模型起作用 . 是否有一些django式的方式来做到这一点?

3 回答

  • -1

    这很简单,只需在 Admin 类中重载 has_add_permission 方法,如下所示:

    class MyAdmin(admin.ModelAdmin):
         def has_add_permission(self, request, obj=None):
            return False
    
  • 7

    默认情况下,syncdb为每个模型创建3个安全权限:

    • 创建(又名添加)

    • 改变

    • 删除

    如果您以管理员身份登录,无论如何都会得到 EVERYTHING .

    但是,如果您创建一个名为 "General Access" 的新用户组(例如),那么您只能为所有模型分配CHANGE和DELETE权限 .

    然后,作为该组成员的任何登录用户将没有“创建”权限,屏幕上将显示与其无关的任何内容 .

  • 281

    这是一个太迟的答案;只是张贴这个,好像有人找到相同的解决方案 .

    在admin.py文件中,您可以执行以下操作:

    class MyModelForm(forms.ModelForm):
    
    class Meta:
        model = MyModel
        fields = '__all__'
    
    
    class MyModelAdmin(admin.ModelAdmin):
        form = QuestionTrackAdminForm
        list_display = ['title', 'weight']
        readonly_fields = ['title', 'weight']
    
    admin.site.register(MyModel, MyModelAdmin)
    

    在这里,“readonly_fields”具有魔力 . 谢谢 .

相关问题