在显示一个Model的修改页面时,django会调用该Model对应的ModelAdmin对象的get_form()方法,该方法会动态生成一个ModelForm的子类,其base_fields字段存放的是{字段名:django.forms.fields.Field子类的实例}.
django.forms.fields.Field实例的生成过程:
get_form()方法在生成ModelForm的子类的过程中,会回调ModelAdmin的formfield_for_dbfield(),该方法中根据formfield_overrides字段指定的db.model.Field与Widget的对应关系选择合适的Widget(和其它参数,最终传入到form.fields.Field的构造函数中)作为参数调用db_field.formfield(),每个db_field自己已经知道了自己对应的form.fields.Field,基本上就是拿着上面传下来的kwargs(dict对象)去构造django.forms.fields.Field了.
formfield_overrides可以加入其它一个参数以控制django.forms.fields.Field的生成.
django.forms.fields.Field实例含有Widget组件,
最后模板中显示非readonly字符时,会调用BaseForm(这里其实是ModelForm)的def __getitem__(self, name)方法(注:调用形式为form[name]),该方法返回的是BoundField(self, field, name),field是django.forms.fields.Field,name是字段名.
BoundField的__unicode__()方法最终调用了widget的widget.render(name, data, attrs=attrs)在页面上显示各种元素.
所以,如果想修改页面上些元素的显示方式,只需要实现自定义的widget,然后放到ModelAdmin的formfield_overrides中就可以了.
分享到:
相关推荐
在Django框架中,Model是数据模型的抽象,它是Django ORM(对象关系映射)的核心部分,允许开发者用Python代码定义数据库表的结构。在这个特定的场景中,"models_django管理_django_django的一个model_"的标题暗示了...
Django排序模型 django-ordered-model允许对模型进行排序,并提供简单的...将ordered_model添加到您的SETTINGS.INSTALLED_APPS 。 从OrderedModel继承模型以使其有序: from django . db import models from orde
在Django这个强大的Web开发框架中,Admin站点是开发者用于后台管理数据的强大工具。通过Admin,我们可以方便地创建、编辑和删除数据库中的记录,而无需编写额外的视图和模板。下面将详细介绍如何在Django中使用Admin...
django-admin.py startproject myweb1 2.创建app控制台输入 python manage.py startapp home 3.创建sqlite3数据库 3.生成test.db文件 4.在setting文件中添加数据库配置 5.进cmd进行数据库连接 6.定义模型 7. ...
将ordered_model添加到您的SETTINGS.INSTALLED_APPS 。 从OrderedModel继承模型以使其有序: from django . db import models from ordered_model . models import OrderedModel class Item ( OrderedModel ): ...
通过《Django入门与实践》这份教程,你将逐步学习如何使用Django构建功能丰富的Web应用,从基础的CRUD操作到复杂的业务逻辑,掌握Django的核心概念和实战技巧。在实践中不断探索,你将发现Django是一个强大而灵活的...
在标准的 Django admin 中,内联模型(inline models)允许在一个对象的编辑页面上同时编辑其关联的子对象,但它们通常是平面展示的。Django-Nested-Admin 改进了这一点,使你可以以树状结构或折叠面板的形式展示和...
总结来说,通过创建一个非管理模型并关联到数据库视图,我们可以将数据库视图无缝集成到Django Admin后台。这种方法对于那些不希望创建额外数据模型,但需要在Admin后台中操作和展示的数据集特别有用。此外,你还...
然而,对于时间筛选,Django Admin默认只提供从某一时间点到当前时间的筛选,无法满足自定义时间区间的筛选需求。这时,我们可以利用第三方插件`django-daterange-filter`来实现这个功能。 **DateRangeFilter介绍**...
**Django 2.1.5 博客页面详解** Django是一个高级的Python Web框架,它鼓励快速开发和清洁、实用的设计。在Django 2.1.5版本中,我们可以创建一个功能完备的博客应用,其中包括文章的添加和删除功能。这个应用基于...
模型是Python类,继承自django.db.models.Model。 ```python from django.db import models class User(models.Model): name = models.CharField(max_length=100) email = models.EmailField() ``` 5. **数据库...
在Django中,每个模型都是Python中的一个类,这些类继承自django.db.models.Model。通过定义模型,可以轻松地创建、检索、更新和删除数据库中的记录。模型定义了数据的结构和字段类型,支持数据字段的验证和迁移。 ...
一旦模型创建并迁移到数据库中,就可以通过 Django ORM (对象关系映射) 来进行增删改查等操作。 例如,查询所有用户: ```python from .models import User users = User.objects.all() ``` ##### 2.4 编写测试 ...
Django的核心架构包括模型(Model)、视图(View)、模板(Template)和URL分发(URL dispatcher)。这四个主要组件构成了MVT设计模式,是Django处理HTTP请求的基础。在源码中,这些部分分别在`django.db.models`、`...
from django.db import models class User(models.Model): username = models.CharField(max_length=50) email = models.EmailField() password = models.CharField(max_length=100) def __str__(self): ...
在Django中,通过继承`django.db.models.Model`类并添加字段来创建模型。 2. **视图(View)**:视图负责处理请求并生成响应。它们可以是简单的函数,也可以是复杂的类。视图根据请求内容(如URL、参数等)来决定...
打开命令行,确保已经安装了Django,然后通过`django-admin startproject project_name`命令创建项目,其中`project_name`是你的项目名。在这个例子中,你可以将它命名为"DjangoDemo"。 接着,创建一个应用。在项目...
Django的Admin管理工具是开发过程中非常方便的功能,它允许开发者快速创建美观且功能完备的后台管理系统。在介绍TabularInline类之前,我们先来理解一下Django Admin的基本概念。Django Admin允许开发者通过简单的...
from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): question ...