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

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

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

谢谢!

【问题讨论】:

    标签: django django-models django-admin django-forms django-templates


    【解决方案1】:

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

    【讨论】:

    • 嗯....感谢您的链接。我无法真正理解代码(或者更好地理解它的工作原理)。编辑表单时 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",)
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 2014-06-15
      • 2021-04-29
      • 2012-09-11
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多