0

我想让用户(他们已登录)使用管理表单编辑项目,而他们无法访问整个管理界面。

这会更容易并且更好地遵循 DRY 原则,因为表单只需要在管理设置中定义一次。它还应该避免必须手动检查用户是否有权编辑该模型,因为这将由管理系统处理。

如果我将用户设置为 is_staff,我知道我可以将他们指向特定模型/项目的编辑/添加页面,但是通过手动编辑 url,他们可以找到通往完整管理界面的方式(至少他们有权访问的那一点)至)。除非我更改整个管理主题,否则管理界面也没有正确的主题。(我认为?)

也许我遗漏了一些明显的东西,并且有一种超级简单的方法可以测试用户是否能够添加/编辑模型并基于 app/admin.py 中的相关类为模型生成整个表单(包括表单集) ,但我还没有找到。

我期待着被告知我是个白痴,并且有一个明显而简单的解决方案。

(编辑:我看过 django-frontendadmin,但它看起来已经过时了,而且 url 的情况看起来很糟糕。)

4

1 回答 1

4

管理员仅适用于受信任的用户。因此,向您网站的所有用户开放管理员是一个坏主意。

您需要模型中的表格......这些被称为modelforms

>>> from django.forms import ModelForm
>>> from myapp.models import Article

# Create the form class.
>>> class ArticleForm(ModelForm):
...     class Meta:
...         model = Article
...
>>> form = ArticleForm()

如何使用表单在表单文档中。

更新:

自动管理界面重用 django.forms。soModelAdmin.form和 aModelForm都是形式。他们有能力做同样的事情。因此,如果您想“仅显示 django 管理表单......简单且开箱即用”。比一个modelform是答案。证明:

from django.db import models
from django.forms import ModelForm
from django.contrib import admin

class Author(models.Model):
   pass

class AuthorForm(ModelForm):
    class Meta:
        model = Author        

class AuthorAdmin(admin.ModelAdmin):
    pass
admin.site.register(Author, AuthorAdmin)

print AuthorForm.__class__ == AuthorAdmin.form.__class__ # True

我能想到的唯一区别是:一些字段在ModelAdmin.form使用管理小部件(小部件很容易定义)和管理有一些图像、js 和 css(媒体很容易包含)。

最后提示:使用有助于样式、排序、小部件等的应用程序,例如django-crispy-forms

于 2013-09-11T22:12:05.703 回答