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 管理站点:添加用户页面如何工作(编辑更多字段)?的主要内容,如果未能解决你的问题,请参考以下文章