仅显示django管理员表单

时间:2013-09-11 21:42:45

标签: python django django-admin

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

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

如果我将用户设置为is_staff,我知道我可以将它们指向特定型号/项目的编辑/添加页面,但通过手动编辑网址,他们可以找到通往完整管理界面的路径(至少位他们有权访问)。除非我更改整个管理主题,否则管理界面没有正确的主题。 (我想?)

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

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

(编辑:我看过django-frontendadmin,但看起来已经过时了,网址情况看起来很糟糕。)

1 个答案:

答案 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.formModelForm都是表单。他们有同样的能力。因此,如果您想'仅显示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