我想让用户(他们已登录)使用管理表单编辑项目,而无需他们访问整个管理界面。
这将更容易并且遵循DRY原则更好,因为表单只需要在管理员设置中定义一次。它还应该避免必须手动检查用户是否有权编辑该模型,因为管理系统会对此进行处理。
如果我将用户设置为is_staff,我知道我可以将它们指向特定型号/项目的编辑/添加页面,但通过手动编辑网址,他们可以找到通往完整管理界面的路径(至少位他们有权访问)。除非我更改整个管理主题,否则管理界面没有正确的主题。 (我想?)
也许我错过了一些明显的东西,并且有一种超级简单的方法来测试用户是否能够添加/编辑模型并基于app /中的相关类为模型生成整个表单(包括表单集) admin.py,但我还没有找到它。
我期待被告知我是个白痴,并且有一个明显而简单的解决方案。
(编辑:我看过django-frontendadmin,但看起来已经过时了,网址情况看起来很糟糕。)
答案 0 :(得分:3)
管理员仅供受信任的用户使用。因此,向您网站的所有用户开放管理员是一个坏主意。
您需要模型中的表单......这些表单称为modelforms。
>>> from django.forms import ModelForm
>>> from myapp.models import Article
# Create the form class.
>>> class ArticleForm(ModelForm):
... class Meta:
... model = Article
...
>>> form = ArticleForm()
如何使用表单位于forms documentation。
更新:
自动管理界面重用django.forms。因此ModelAdmin.form
和ModelForm
都是表单。他们有同样的能力。因此,如果您想'仅显示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。