首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何像Django Admin一样在表单中创建外键链接字段?

在Django中,可以通过使用ModelChoiceField来创建外键链接字段,实现类似Django Admin中的功能。以下是一个完善且全面的答案:

外键链接字段是一种在表单中显示外键关联模型对象的字段。在Django中,可以使用ModelChoiceField来创建外键链接字段。ModelChoiceField是一个表单字段类,用于选择一个模型对象。

在创建外键链接字段之前,首先需要定义相关的模型和表单。假设我们有两个模型,一个是Author,另一个是Book,并且Book模型有一个外键字段指向Author模型。

代码语言:python
代码运行次数:0
复制
from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    author = forms.ModelChoiceField(queryset=Author.objects.all())
    
    class Meta:
        model = Book
        fields = '__all__'

在上面的代码中,我们定义了一个名为BookForm的表单类,并在其中使用ModelChoiceField创建了一个外键链接字段authorqueryset参数指定了可选的Author对象集合,这里我们使用Author.objects.all()获取所有的Author对象。

接下来,我们可以在视图中使用这个表单类来处理表单数据,并将其渲染到模板中。

代码语言:python
代码运行次数:0
复制
from django.shortcuts import render
from .forms import BookForm

def create_book(request):
    if request.method == 'POST':
        form = BookForm(request.POST)
        if form.is_valid():
            form.save()
            # 保存成功后的处理逻辑
    else:
        form = BookForm()
    
    return render(request, 'create_book.html', {'form': form})

在上面的代码中,我们首先判断请求的方法是否为POST,如果是,则创建一个BookForm实例,并将POST数据传递给表单。然后,我们检查表单的有效性,如果有效,则保存表单数据。如果请求的方法不是POST,则创建一个空的BookForm实例。

最后,我们将表单实例传递给模板进行渲染。在模板中,可以使用form对象的as_pas_tableas_ul方法将表单字段渲染为HTML。

代码语言:html
复制
<!-- create_book.html -->
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">保存</button>
</form>

以上就是如何像Django Admin一样在表单中创建外键链接字段的方法。通过使用ModelChoiceField,我们可以轻松地在表单中显示外键关联模型对象,并实现类似Django Admin的功能。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django基表的创建字段属性简介、脏数据概念、子序列化

Django基表的设置 通过图书管理系统引入多表操作:如果我们创建表的方式是先抽象出表与表之间相同的字段建一个父类,然后在用每个表类去继承这个父类,如下面的代码,我们将无法得到期望的表字段。...反过来先操作表B后操作表A,更满足逻辑思维,一样可以执行。通过逻辑将A、B表进行连表查询,不会有任何异常。如两张表建立了一对一字段A表,那么先往B表写数据就更合理。...假设图书管理系统书、出版社、作者、作者详细信息四张表之间的关系如下: """ 表关系 1)Book 和 Publish 一对多:多的一方 Book 2)Book 和 Author 多对多:查询频率高的一方...Book 3)Author 和 AuthorDetail 一对一:要根据实际需求建立合理的位置 AuthorDetail(AuthorDetail方作者就可以没有AuthorDetail,...更合理) """ Django orm中外字段属性详解 在建表之前我们对外字段属性进行了解: 1)related_name在外设置反向查询的字段名:正向找字段名,反向找related_name

4.3K30
  • Django 1.10文文档-第一个应用Part7-自定义管理站点

    在这个表单,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Djangoadmin站点中,自动地将所有的关系展示为一个select框。...我们的例子,目前只有一个question对象存在。 请注意图中的绿色加号,它连接到Question模型。每一个包含关系的对象都会有这个绿色加号。...点击它,会弹出一个新增Question的表单,类似Question自己的添加表单。填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice的关联对象。...通俗讲就是,新建一个Question并作为当前Choice的。 但是,实话说,这种创建方式的效率不怎么样。...请参考如何重用apps (0%)。 接下来,刚才创建的templates创建一个admin目录,将admin/base_site.html模板文件拷贝到该目录内。

    3.6K60

    Django 3.1 官网学习路线

    字段还可以有各种可选参数;本例,我们将投票的默认值设置为 0。 最后,请注意使用定义了关系。这告诉 Django 每个选择都与一个问题相关。...按照惯例,Django 会将"_id"附加到外字段名。(是的,你也可以重写这个。) 关系是通过约束来显式的。...不要担心可延期的部分;它告诉 PostgreSQL 事务结束之前不要强制执行。...通常,您需要定制管理表单的外观和工作方式。可以通过注册对象时告诉 Django 所需的选项来实现。 通过重新排列编辑表单字段来了解其工作原理。...“添加选择”表单如下所示: 表单,“Question”字段是一个选择框,包含数据库的每个问题。Django 知道一个应该在管理中表示为一个框。我们的例子,目前只存在一个问题。

    8.2K10

    django 1.8 官方文档翻译: 1-2-2 编写你的第一个Django应用,第2部分

    这样的话你就需要在注册对象 时告诉 Django 对应的配置。 让我们来看看如何在编辑表单上给字段重新排序。...刚才所说的有许多字段表单,你可能想将表单字段分割成 fieldsets :: class PollAdmin(admin.ModelAdmin): fieldsets = [...Add choice” 表单 看起来这样: 该表单,Poll 字段是一个包含了数据库每个 poll 的选择框。...Django 知道 ForeignKey 管理网站以 框显示。本例,选择框仅存在一个 poll 。 另外请注意 Poll 旁边的 “Add Another” 链接。...请注意 Django 默认的管理网站的任何模板都是可覆盖的。 要覆盖一个模板,只需要刚才处理 base_site.html 一样 – 从默认的目录下复制到你的自定义目录下,并修改它。

    2.5K40

    Django相关知识点回顾

    2.项目创建 创建项目: django-admin startproject 项目名 创建子应用: python manage.py startapp 子应用 子应用首先到settings配置文件INSTALLED_APPS...class Meta: db_table = '' 定义属性: # 表中外字段名格式: hbook = models.ForeignKey('BookInfo...) all,filter,exclude,order_by这4个函数返回的是查询集对象 特点 可以list一样进行操作,可以遍历、取下标、进行切片,切片时下标不允许为负数。...以上内容详细介绍请看文章『我是个链接』 ---- 14.Admin站点 Django自带文件存储系统,可以直接通过Admin站点进行图片的上传,默认上传的文件保存在服务器本地。...使用 1.配置文件设置配置项MEDIA_ROOT='上传文件的保存目录' 2.定义模型类时,图片字段的类型使用 ImageField 3.迁移生成表并在admin.py注册模型类,直接登录Admin

    10K51

    Django model 层之Models与Mysql数据库小结

    参考链接: https://docs.djangoproject.com/en/1.11/topics/db/models/#field-options 关联关系 关联 假设artist model...删除被参照表的某条表记录,同时级联删除参照表,同待删除记录存在外关联关系的记录。 PROTECT 删除被参照表的某条表记录,如果参照表,存在与该记录有关系的记录,则不让删除。...SET_NULL 删除被参照表的某条表记录,设置参照表,同待删除记录存在外关联的记录的列值为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表的某条表记录,设置参照表,同待删除记录存在外关联的记录的列值为默认值。必须为列设置默认值。...SET() 删除被参照表的某条表记录,设置参照表,同待删除记录存在外关联关系的记录的列值为传递给SET()的参数值,如果传递给SET()的参数值是可调用对象,则设置为调用可调用对象获取的结果。

    2.2K20

    Django模型

    Django模型 Django的模型定义models.py文件。模型是MVT的M,也相当于MVC的M。 Django,模型必须继承自Model类。...例如可以在上面的name字段指定参数verbose_name=“书籍名称”,那么admin管理页面就会看到书籍名称。... 这个东西,通常都是在业务逻辑层面来实现的,而不是在数据库实现。但是通常大家学习的数据库课程,都会有数据库设计范式,其中有个第三范式就是专指的约束。在这里只是简单的介绍一下。...choices参数就是从我们定义的二元组(GENDER_CHOICES)获取值。二元组的第一个值会储存在数据库,而第二个值将只会用于表单显示。...,此选项会抛出IntegrityError异常 注意:我们在数据库,设置的时候需要制定另一张表关联的字段,但是Django里并没有指定。

    1.9K20

    Django | allauth】useprofile 用户模型扩展

    应用的models.py 创建扩展模型(添加字段)from django.contrib.auth.models import Userfrom django.db import models# Create...通过重写表单,你还可以很容易添加其它字段。...(修改了注册表单)四、 创建proflie模板和proflie_update模板allauth 包复制粘贴templates 的account包到该项目的templates的account下,原因:...:我们登录用户之后,此时系统是记录我们的用户信息的,而此时如果我们更改路径到admin,输入我们的管理员账号会报 提供了两个参数的信息,这是因为管理员的用户信息和当前用户信息冲突了,需要signout...当前用户当输入密码错误时也会报和上面一样的错误(当时调试了好久)效果:图片参考文献:扩展用户自带模型(allauth)扩展用户自带user模型(非allauth实现)related_namedef

    19710

    Django 1.10文文档-第一个应用Part2-模型和管理站点

    它看起来这样: # mysite/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth...(你也可以重写这个行为); 按照惯例,Django会在外字段名后面添加 "_id"。(你依然可以重写这个行为); 关系由FOREIGN KEY约束显式声明。...不用在意DEFERRABLE部分;它只是告诉PostgreSQL直到事务的最后再执行关联; 这些SQL语句是针对你所使用的数据库定制的,所以会为你自动处理某些数据库所特有的字段例如auto_increment...每一种类型的字段Django管理站点都知道如何显示它们; 每个DateTimeField字段都会有个方便的JavaScript快捷方式。...Part3-视图和模板 Django 1.10文文档-第一个应用Part4-表单和通用视图

    2.3K60

    Django | allauth】useprofile 用户模型扩展

    应用的models.py 创建扩展模型(添加字段) from django.contrib.auth.models import User from django.db import models...user对象,并没有创建userprofile并自动与扩展模型userprofile 进行关联,所以需要重写注册表单,并修改默认注册表单配置,注册时两个对象一起被创建,并存储到数据库。...通过重写表单,你还可以很容易添加其它字段。...(修改了注册表单) 四、 创建proflie模板和proflie_update模板 allauth 包复制粘贴templates 的account包到该项目的templates的account下,原因...当前用户 当输入密码错误时也会报和上面一样的错误(当时调试了好久) 图片 效果: 图片 参考文献: 扩展用户自带模型(allauth) 扩展用户自带user模型(非allauth实现) related_name

    1.1K10

    django admin详情表单显示添加自定义控件的实现

    开发中有需求详情显示里外字段内容,并且添加按钮弹窗内容,以及按钮跳转内容。...添加一个字段字段中有一个widget参数,我们可以在其中设置控件,我在里面添加了一个input类型,TextInput对象的参数attrs传入的是一个字典,我们可以在里面写html一样写相关的css...这个时候我们就可以详情内看见button了,但是相对应的,detail的表单添加后,add的表单也会出现一个button,这个不是我们想要的,所以就要想办法让button只存在于detail界面...而弹出窗口的值获取可以form添加一个hidden字段,value为我们想要获取的值,js取值赋值即可。...刷新页面即可; 以上这篇django admin详情表单显示添加自定义控件的实现就是小编分享给大家的全部内容了,希望能给大家一个参考。

    4.9K20

    django 1.8 官方文档翻译: 5-1-1 使用表单

    使用表单 关于这页文档 这页文档简单介绍Web 表单的基本概念和它们Django 如何处理的。关于表单API 某方面的细节,请参见表单 API、表单字段表单字段的检验。...与 元素一样,一个表单必须指定两样东西: where:响应用户输入的URL how:HTTP 方法 例如,Django Admin 站点的登录表单包含几个 元素:type="...这个URL 将包含数据发送的地址以及数据的和值。如果你Django 文档做一次搜索,你会立即看到这点,此时将生成一个https://docs.djangoproject.com/search/?...实例化、处理和渲染表单 Django 渲染一个对象时,我们通常: 视图中获得它(例如,从数据库获取) 将它传递给模板上下文 使用模板变量将它扩展为HTML 标记 模板渲染表单和渲染其它类型的对象几乎一样...直到现在,我们没有担心如何展示错误信息,因为Django 已经帮我们处理好。在下面的例子,我们将自己处理每个字段的错误和表单整体的各种错误。

    4.2K20

    35.Django2.0文档

    第六章 Django站点管理  1.创建admin用户 python manage.py createsuperuser  访问:http://127.0.0.1:8000/admin/,输入用户名,密码登录进入管理界面...3.设置字段可选  你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例子,我们想要Author模块的email字段成为可选,即允许不填。...首先,我们先自定义字段顺序。 默认地,表单字段顺序是与模块定义是一致的。...filter_horizontal和filter_vertical选项只能用在多对多字段上, 而不能用于ForeignKey字段。 默认地,管理工具使用`` 下拉框`` 来展现`` `` 字段。...它是一个包含字段名称的元组,它包含的字段将被展现成`` 文本框`` ,而不再是`` 下拉框`` 。

    11.3K100

    Django&DRF重点内容大盘点

    1.Django 1.1创建Django项目 这一命令必须熟记于心: django-admin startproject 项目名 1.2 创建子应用 1.在工作我们要开发很多项目,肯定需要很多模块,创建子应用肯定也需要掌握...2.创建完子应用之后,千万不要忘记去INSTALLED_APPS中进行注册,这个参数setting文件。...' # 中国时间 1.6客户端向服务器传递参数途径 1.6.1通过URL地址传递参数 我们的url地址的参数,我们如果想要获取可以子应用的urls文件中进行设置 还可以 (?..., verbose_name='图书') # cascade是级联,删除主表数据时连同数据一起删除 1.12.3迁移生成表 1)生成迁移文件 python manage.py makemigrations...使用 1)配置文件设置配置项MEDIA_ROOT='上传文件的保存目录' 2)定义模型类时,图片字段的类型使用 ImageField 3)迁移生成表并在admin.py注册模型类,直接登录Admin

    5.9K20

    后端框架学习-Django

    重写,则按照重写效果显示 注意: 模板继承时,服务器的动态内容无法继承 url反向解析 代码url的位置: 1.模板 超链接 form表单 form action 将表单的数据用...一对一映射 创建一对一: 语法:OneToOneField(类名, on_delete=xxx(级联删除:存在的前提下的删除规则)) on_delete: models.CASCADE:级联删除...创建一对一数据 无的模型类,和之前相同 有的模型类: wife = Wife.objects.create(name=’王夫人’,author = author1(类属性名称绑实例...)) wife = Wife.objects.create(name=’王夫人’,author_id = 1(类属性字段绑值)) 一对一查询 正向查询:从查对象 反向查询:从对象查 调用反向属性查询到关联的一方...一对多查询 核心:正向属性(authors)和反向属性(book_set) 多表上设置,关联一表。

    9.5K40

    【愚公系列】2022年01月 Python教学课程 40-Django框架之模型属性详解

    文章目录 一、模型类定义 二、模型类迁移 总结 ---- 一、模型类定义 models.py 文件定义模型类,示例如下: from django.db import models # Create...若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用 unique 如果为True, 这个字段必须有唯一值,默认值是False null是数据库范畴的概念...,blank是表单验证范畴的 6) 设置时,需要通过on_delete选项指明主表删除数据时,对于引用表数据如何处理,django.db.models包含了可选常量: CASCADE...级联,删除主表数据时连通一起删除外数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL设置为NULL,仅在该字段null=True...1)生成迁移文件 python manage.py makemigrations 2)同步到数据库 python manage.py migrate 总结 django开发模型类和字段最好在代码里定义迁移同步到数据库

    1.4K20

    关于“Python”Django 管理网站的核心知识点整理大全52

    我们创建应用程序learning_logs时,Djangomodels.py所在的目录创建了一个名为 admin.py的文件: admin.py from django.contrib import...单击Add,你将看到一个用于添加新主题的表单第一个方框输入Chess,再单击Save,这将返回到主题管理页面,其中包含刚创建的主题。 下面再创建一个主题,以便有更多的数据可供使用。...Topic一样,Entry也继承了Django基类Model(见1)。第一个属性topic是一个ForeignKey实 例(见2)。...是一个数据库术语,它引用了数据库的另一条记录;这些代码将每个条目关联 到特定的主题。每个主题创建时,都给它分配了一个(或ID)。...这种字段不需要长度限制,因为我们 不想限制条目的长度。属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置 时间戳。 4处,我们Entry类嵌套了Meta类。

    16410
    领券