Django 管理站点:添加用户页面如何工作(编辑更多字段)?

Posted

技术标签:

【中文标题】Django 管理站点:添加用户页面如何工作(编辑更多字段)?【英文标题】:Django admin site: How does the Add User page work (more fields on edit)? 【发布时间】:2011-04-25 03:44:28 【问题描述】:

我想知道他们是如何在 Django 管理站点的用户页面中显示更多字段的。 如果您创建一个新用户,您只需填写一些基本字段,但如果您重新打开该用户(编辑模式),您会看到更多字段需要填写。

我正在尝试实现相同的目标,我查看了add_form.html 模板,但我无法真正理解它。我想我正在寻找一种根据文档的编辑状态指定不同字段 = [] 集的方法。

谢谢!

【问题讨论】:

【参考方案1】:

答案就在the custom admin class registered for the User model。它覆盖ModelAdmin 上的几个方法,并检查当前请求是创建一个新的User(在这种情况下使用用于添加帐户的基本表单类)还是编辑现有的一个(在这种情况下)显示了完整的表格)。

【讨论】:

具体见get_form:code.djangoproject.com/browser/django/trunk/django/contrib/auth/… 嗯....感谢您的链接。我无法真正理解代码(或者更好地理解它的工作原理)。编辑表单时 obj 是否设置为 None ?默认对象有什么作用?如果您能提供一个快速示例,说明我如何将这个功能用于我自己的模型(在创建模式下显示一些字段,在编辑模式下显示其他一些字段),我将非常感激。谢谢!【参考方案2】:

这是我的尝试。当我尝试创建一个新项目(添加)时,它只显示某些字段,但是当我点击保存时它返回一个错误:

DoesNotExist

在 /Library/Python/2.6/site-packages/django/db/models/fields/related.py 中 get,第 288 行

admin.py

    from django.contrib import admin
    from myapp.catalog.models import Model
    from myapp.catalog.forms import ProductAdminForm, ProductAddForm

    class ProductAdmin(admin.ModelAdmin):

        form = ProductAdminForm

        #...

        add_form = ProductAddForm

        def get_form(self, request, obj=None, **kwargs):
            defaults = 
            if obj is None:
                defaults.update(
                    'form': self.add_form,
                )
            defaults.update(kwargs)
            return super(ProductAdmin, self).get_form(request, obj, **defaults)

forms.py

from myapp.catalog.models import Product

class ProductAdminForm(forms.ModelForm):

    class Meta:
        model = Product
        #...

class ProductAddForm(forms.ModelForm):
    class Meta:
      model = Product
      fields = ("model", "colour",)

【讨论】:

以上是关于Django 管理站点:添加用户页面如何工作(编辑更多字段)?的主要内容,如果未能解决你的问题,请参考以下文章

如何只允许管理员(或某些用户)在 Django 中编辑页面?

Django站点管理

Django 中Admin站点的配置

如何使登录表单在 Django 的整个站点上可用

如何在 django 管理员的编辑页面中添加“预览”按钮?

无法使用有效的用户名和密码登录 django 管理页面