在 Django 中,外键(ForeignKey)通常只引用另一张表的一个字段,比如一个主键或一个唯一标识字段。然而,如果我们需要让一个外键引用另一张表中的多个字段,通常有以下几种方法来实现这种关系。...1、问题背景在 Django 中,模型之间的关系通常使用外键(ForeignKey)来建立。外键允许一个模型中的字段引用另一个模型中的主键。然而,有时我们需要在一个模型中引用另一个模型中的多个字段。...2、解决方案为了在 sales_process 表中引用 product_models 表中的多个字段,我们可以使用复合主键(Composite Key)的方式。复合主键是指由多个字段组成的主键。...以下是如何在 Django 中使用复合主键来实现外键引用另一个表中的多个字段:在 product_models 模型中,添加一个 id 字段作为主键:class product_models(models.Model...划重点Django 不直接支持复合外键,但可以通过添加唯一约束、使用中间表或在查询中使用逻辑约束来实现类似效果。
同时,还有可能两个结果列表并不包含相同的数据库记录,因为在两次请求期间有可能有Entry被添加进来或删除掉。...这是必需的。 InlineModelAdmin.fk_name 模型上的外键的名称。 在大多数情况下,这将自动处理,但如果同一父模型有多个外键,则必须显式指定fk_name。...使用具有两个或多个外键的模型与同一个父模型 有时可能有多个外键到同一个模型。 ...这是因为,就管理而言,through只是一个具有两个外键字段而不是多对多关系的模型。 在所有其他方面,InlineModelAdmin与任何其他方面完全相同。 ...相同的URLconf 中的多个管理站点 在同一个Django供电的网站上创建管理站点的多个实例很容易。 只需要创建AdminSite 的多个实例并将每个实例放置在不同的URL 下。
如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。...如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。 不允许在同一个模板中定义多个同名的 {% block %} 。...它有一个或多个作者(和作者是多对多的关联关系[many-to-many]), 只有一个出版商(和出版商是一对多的关联关系[one-to-many],也被称作外 键[foreign key...我们可以对任意字段进行排序,如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),使用多个参数就可以了,如下: ?...例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的添加页面装载时间较久,因为它必须把每一个publisher都装载并显示在`` 下拉框`` 中。
比如,我们之前在west中创建的模型Character。...这个页面除了west.characters外,还有用户和组信息。它们来自Django预装的Auth模块。我们将在以后处理用户管理的问题。 “我已经管理这个庄园几十年了。”...Tag以Contact为外部键。一个Contact可以对应多个Tag。 我们还可以看到许多在之前没有见过的属性类型,比如IntegerField用于存储整数。 ?...Inline显示 上面的Contact是Tag的外部键,所以有外部参考的关系。而在默认的页面显示中,将两者分离开来,无法体现出两者的从属关系。...“但我也不是好惹的。” 列表页的显示 在Contact输入数条记录后,Contact的列表页看起来如下: ?
0922自我总结 django后台管理-admin 一.模型注册 admin.py 注册方式一: #在对于注册的app中的admin文件中导入模型然后注册模型 admin.site.register(导入的模型类...可以在settings.py中设置: LANGUAGE_CODE = 'zh-CN' TIME_ZONE = 'Asia/Shanghai' 1.8版本之后的language code设置不同: LANGUAGE_CODE...#listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键) list_display = ('id', 'caption', 'author', 'publish_time...过滤器如果是外键需要遵循这样的语法:本表字段__外键表要显示的字段。...): list_display = ('first_name', 'last_name', 'colored_name') 注意看上面代码,是写在models里,而不是admin中的ModelAdmin
ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式 上文中展示了TestAdmin类的一种注册方法,还有一种方法,就是使用装饰器注册,... = 'unknown' 以上通过指定方法属性来控制显示是新老版本通用的,在Django3.2可以通过给装饰器传参来解决: 在model.py中: 1234567891011121314151617...中: 123456789101112 from XXX import Testfrom django.contrib import admin class TestAdmin(admin.ModelAdmin...,如下截图所示: list_filter 应是一个列表或元组,参数字段可以是模型字段,包括外键字段(注意list_display是不能直接接收外键字段的),会将对应字段的值列出来,一般用于快速过滤有重复值的字段...12 class TestAdmin(admin.ModelAdmin): search_fields = ['id','name'] 在搜索框中进行搜索时,Django 会将搜索查询拆分成多个词
在这个表单中,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Django在admin站点中,自动地将所有的外键关系展示为一个select框。...在我们的例子中,目前只有一个question对象存在。 请注意图中的绿色加号,它连接到Question模型。每一个包含外键关系的对象都会有这个绿色加号。...点击它,会弹出一个新增Question的表单,类似Question自己的添加表单。填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice的关联外键对象。...通俗讲就是,新建一个Question并作为当前Choice的外键。 但是,实话说,这种创建方式的效率不怎么样。...想要重写一个模板文件,只需要做和重写base_site.html相同的操作就行——将它从默认的目录拷贝到你自定义的目录中,然后修改它。
Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控制。以下是我最近摸索总结出比较实用的配置。...import Blog #Blog模型的管理器 @admin.register(Blog) class BlogAdmin(admin.ModelAdmin): #listdisplay设置要显示在列表中的字段...list_editable 设置默认可编辑字段 list_editable = ['machine_room_id', 'temperature'] #fk_fields 设置显示外键字段...过滤器如果是外键需要遵循这样的语法:本表字段__外键表要显示的字段。如:“user__user_name” 3、颜色显示 想对某些字段设置颜色,可用下面的设置: ?...但是,我们看到标题并不是我们想要的,那么如何设置标题呢? 添加一行代码:colored_status.short_description = u"状态" ? 在函数结束之后添加上面代码即可 ?
最近博客在做新功能,就是增加了两个模型,分别是专题和主题,主要就是用来对文章进行系列划分,在这个设计过程中,文章和主题会进行一个关联,当主题的数量很多的时候,文章在选择要关联的主题的时候会非常难选。...一般遇到这种筛选,在前端里面都是可以进行输入来进行过滤的,所以我就查看了 Django的文档 找到了可以添加这个功能的方法,就是autocomplete_fields字段。...= ['name', 'subject__name'] @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): # 可以给外键的选择增加搜索...,前提是外键的管理模型必须设置search_fields作为搜索条件 autocomplete_fields = ['topic'] 看一下效果: 这里已经出现了搜索框,可以通过搜索条件来过滤选项...总结 本篇介绍了Django的admin.ModelAdmin中使用autocomplete_fields字段来给关联模型添加过滤搜索。
=('id', 'caption', 'author', 'publish_time') 2,admin界面汉化 默认admin后台管理界面是英文的,可以在settings.py中设置: LANGUAGE_CODE...='zh-hans' TIME_ZONE='Asia/Shanghai' 二、记录列表界面设置 1,记录列表基本设置 from django.contrib import admin from...for obj_author in obj.author.all()]) #listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键) list_display...ordering = ('-price',) #list_editable 设置默认可编辑字段 list_editable = ['price'] #fk_fields 设置显示外键字段..._registry[model] = admin_class(model) site=AdminSite() 注册完模型类之后,只是完成了在_registry字典里加了键值对,以模型类为键,配置类对象为值
如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下...BlogAdmin(admin.ModelAdmin): #listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键) list_display...过滤器如果是外键需要遵循这样的语法:本表字段__外键表要显示的字段。...但是,我们看到标题并不是我们想要的,那么如何设置标题呢? 添加一行代码:colored_status.short_description = u"状态" ? 在函数结束之后添加上面代码即可 ?...中添加一条对应的url urls.py 1 2 3 4 5 6 7 from django.conf.urls import url from hys_operation
admin.site.register(Object) from django.contrib import admin from mysite.books.models import Publisher...django.contrib import admin from mysite.books.models import Publisher, Author, Book class AuthorAdmin...) //////list_display=('xx','b') //////search_fields=('a','b') ////// date_hierarchy='xx_date' 在右上角有个日期的导航条...默认地,管理工具使用下拉框 来展现外键 字段。但是,正如多对多字段 那样,有时候你不想忍受因装载并显示这些选项而产生的大量开销。...例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的添加页面装载时间较久,因为它必须把每一个publishe都装载并显示在下拉框 中 9 ForeignKey:用raw_id_fields
1、创建超级用户: python manage.py createsuperuser 2、在admin.py中注册可以管理的数据库 -- coding: utf-8 -- from future import...from django.contrib import admin from blog import models class BlogPostAdmin(admin.ModelAdmin):...、每页显示几行、排序、默认可编辑的页面、外键字段、点击可以编辑的字段:list_display,list_per_page,ordering,list_editable,fk_fields,list_display_links...BlogAdmin(admin.ModelAdmin): #listdisplay设置要显示在列表中的字段(id字段是Django模型的默认主键) list_display = ('id', 'caption...publish_time',) #list_editable 设置默认可编辑字段 list_editable = ['machine_room_id', 'temperature'] #fk_fields 设置显示外键字段
这是纯粹的验证操作,外键和多对多操作使用它来决定两个对象之间是否应该允许一个关联。...当保存在statement 2中发生时,p已经具有一个主键,Django 将尝试在新的数据库上使用该主键。...'first') >>> p.save(using='second', force_insert=True) 这将确保名称为Fred 的Person在两个数据库上具有相同的主键。...目前不提供跨多个数据库的外键或多对多关系的支持。...然而,如果你正在使用SQLite 或MySQL的MyISAM 表,则没有强制性的引用完整性;结果是你可以‘伪造’跨数据库的外键。但是Django 官方不支持这种配置。
media 这两个文件夹 配置 pycharm 运行参数 配置完成后点击 pycharm 中的运行按钮,在浏览器中输入 127.0.0.1:8000 访问,出现小火箭升空表示 Django...安装成功, 访问 Django-admin 界面, 在浏览器中输入 127.0.0.1:8000/admin,看到 Django 管理,需要输入用户名密码,输入用户名密码后可以跳转到 Django 管理页面表示...,分类 id tag_id ManyToManyField 外键,标签 id 分类表 字段 类型 备注 id PrimaryKey 主键 name CharField...password CharField 密码 评论表 字段 类型 备注 id PrimaryKey 主键 user_id ManyToManyField 外键...中 将重复出现的部分提取出来,这个根据自己的模版抽取,每个都不相同,静态文件加载 如果一次没有提取好,可以慢慢一点点的抽取,对于一个后端程序员来说这个是一个慢工出细活的过程。
查看、编辑和删除记录:点击列表中的记录,可以查看详细信息并进行编辑或删除操作。 通过这一章的学习,你将对Django Admin有基本的了解,并能够开始使用它来管理你的数据模型。...使用内联模型:在父模型的Admin类中添加内联模型,如inlines = [RelatedModelInline]。...自定义字段:可以在自定义用户模型中添加额外的字段,如手机号码、地址等。 自定义认证后端:可以编写自定义的认证后端来处理特定的认证逻辑。...权限检查:在视图或模板中,可以使用user.has_perm()或user.has_perms()来检查用户是否具有特定权限。...Admin actions: 添加批量发布和批量删除等Admin actions,可以在admin.py文件中为相应的模型添加自定义的Admin actions。
QueryDict 在HttpRequest对象中,GET和POST属性是django.http的实例。QueryDict类。 QueryDict是一个用户定义的类,类似于字典。...它用于处理单个键对应多个值的情况。 QueryDict实现所有标准字典方法。...csrf的全称是跨站点请求伪造。这是Django提供的防止伪装提交请求的功能。POST方法提交的表单必须具有此标签。...在默认页面显示中,不能将两者分开以反映其相关性。我们可以使用内联显示将标记附加到联系人的编辑页面。...由于id在pychar中具有特殊含义,它指的是内存地址的内置函数id(),因此使用pk。
管理操作 简而言之,Django管理后台的基本流程是,“选择一个对象并改变它”。在大多数情况下,这是非常适合的。然而当你一次性要对多个对象做相同的改变,这个流程是非常的单调乏味的。...在这些例子中,Django管理后台可以让你实现和注册“操作” —— 仅仅只是一个以已选中对象集合为参数的回调函数。 在Django自带的管理页面中都能看到这样的例子。...添加操作到 ModelAdmin 接下来,我们需要把操作告诉ModelAdmin。它和其他配置项的工作方式相同。...也就是说,异常处理和使用django.contrib.admin.ModelAdmin.message_user()可以在响应中展示用户友好的问题描述。...字典的键是操作的名称,值是 (function, name, short_description)元组。 多数情况下,你会按需使用这一方法,来从超类中的列表移除操作。
默认外键展示的坑 拿新闻网站举例,一篇文章肯定是属于某个频道的,这是一个外键。那么我在后台新增文章时,肯定需要选择归属于那个频道。...djangoadmin和xadmin的做法都是把外键数据全部加载出来,渲染到select表中。 当外键的数据量小的时候,这不是个问题,但是如果你的频道有上千个呢?再多点呢?...admin的autocomplete_fields 在Django的2.0版本中,提供了这样的功能,可以在admin配置中,定义autocomplete_fields = ['外键字段']来解决上面说到的问题...因此这个外键字段必须配置了admin才行(并且设置了search_fields配置)。...Django本身的实现很简单,比起我们增加外部库的配置,Django自己直接在admin代码中增加了autocomplete_view以及对应的url,来支持这个逻辑。
上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为中的name 注意:FILES只有在请求的方法为...项中加入django.contrib.admin,Django就会自动搜索每个应用的admin模块并将其导入 ModelAdmin对象 ModelAdmin类是模型在Admin界面中的表示形式 定义:定义一个类...True actions_on_bottom = True list_display 出现列表中显示的字段 列表类型 在列表中,可以是字段名称,也可以是方法名称,但是方法名称默认不能排序 在方法中可以使用...other', {'fields': ('hcontent')}) ) fields与fieldsets两者选一 InlineModelAdmin对象 类型InlineModelAdmin:表示在模型的添加或修改页面嵌入关联模型的添加或修改...编辑base_site.html文件 刷新页面,发现以刚才编辑的页面效果显示 其它管理后台的模板可以按照相同的方式进行修改
领取专属 10元无门槛券
手把手带您无忧上云