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

Django:如何从model表单上的选择中获取外键ID?

在Django中,可以通过以下步骤从model表单上的选择中获取外键ID:

  1. 首先,在你的model中定义外键字段。例如,假设你有一个名为Book的model,其中包含一个外键字段author,指向Author模型:
代码语言:txt
复制
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
  1. 在你的视图函数中,当处理表单提交时,可以通过request.POST获取用户选择的外键ID。假设你的表单中有一个名为author的选择字段:
代码语言:txt
复制
from django.shortcuts import render
from .models import Book

def create_book(request):
    if request.method == 'POST':
        title = request.POST['title']
        author_id = request.POST['author']  # 获取用户选择的外键ID
        book = Book(title=title, author_id=author_id)
        book.save()
        # 其他处理逻辑...
    else:
        # 渲染表单页面...
        return render(request, 'create_book.html')

在上述代码中,request.POST['author']将返回用户选择的外键ID。

  1. 如果你想在模板中获取外键ID,可以使用Django模板语言的value_from_instance过滤器。假设你的模型实例为book,你可以通过以下方式获取外键ID:
代码语言:txt
复制
<select name="author">
  {% for author in authors %}
    <option value="{{ author.id }}" {% if book.author_id == author.id %}selected{% endif %}>{{ author.name }}</option>
  {% endfor %}
</select>

在上述代码中,author.id将返回外键ID,并使用selected属性将选中用户之前选择的选项。

总结起来,要从model表单上的选择中获取外键ID,你需要在model中定义外键字段,然后在视图函数中通过request.POST获取用户选择的外键ID,或者在模板中使用value_from_instance过滤器获取外键ID。

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

相关·内容

Django 2.2文档系列】Model on_delete参数用法

场景 我们用DjangoModel时,有时候需要关联。关联时,参数:on_delete几个配置选项到底是干嘛呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...Django会模拟SQL约束行为,在删除此条数据时,同事删除外关联对象。...提醒:级联删除不会调用model级行为,但是会为所有已删除对象发送pre_delete和 post_delete信号,有用Django信号机制场景,要考虑这个级联删除带来影响。...当数据被删除时,被关联内容被设置为null。 models.SET_DEFAULT 将值设置为默认值。必须设置有默认值 。...如果后端数据库有强制关联操作,这是容易报错:IntegrityError,除非你在数据库手动添加了SQLON DELETE约束。

2K10

djangoModelForm多表单组合解决方案

这么多种选择放在一起,如何分出高下?我想此时场景下就两个标准: 1、相同功能用最少代码实现(代码少BUG也会少); 2、相对最易于理解,从而易于维护和扩展。...所以,基本表单功能看BaseForm已经足够了。 2、模型创建表单 django对于MVCC与M间映射是非常体贴,集中体现Model模型(比如模型权限与用户认证)。...那么,一个模型代表着RDS一张表,模型实例代表着关系数据库一行,而form如何与一行相对应呢?...#按照四条数据库记录顺序依次创建(调用save方法)、主键赋到下一条记录、下一次记录创建(save)           projectAddress = context['projectAddressForm...'].save()           #项目表单获取到模型,先把地址id赋到外再保存           project = context['projectForm'].save(commit

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

    ', on_delete=models.CASCADE) 说明:mysql,生成列名称,会自动命名为:field_id,如上borrower field对应mysql列为borrower_id...如果设置了该选项值,那么默认表单组件将变为一个select box,而不是标准是text field,且将被限制给定choice中选择choice。...删除被参照表某条表记录,同时级联删除参照表,同待删除记录存在外关联关系记录。 PROTECT 删除被参照表某条表记录,如果参照表,存在与该记录有关系记录,则不让删除。...SET_DEFAULT 删除被参照表某条表记录,设置参照表,同待删除记录存在外关联记录列值为默认值。必须为列设置默认值。...SET() 删除被参照表某条表记录,设置参照表,同待删除记录存在外关联关系记录列值为传递给SET()参数值,如果传递给SET()参数值是可调用对象,则设置为调用可调用对象获取结果。

    2.2K20

    Django项目知识点(四)

    json键值对,而不是列表 request.body就是form表单数据 Queryset Django ORM用到三个类:Manager、QuerySet、Model。...QuerySet实例 就是数据库根据自己要求拿数据 连数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 在modelDjango通过给Model增加一个objects...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们数据库拉出到Python内存 说白了就是我数据库拿东西,但是有些需要字段没有,要通过绑定appmodel拿。...但是名称又是app__字段来命名,这样我要改名称,而且拿第一次model,放在python内存,再拿通过绑定另一个model,又要执行第一次步骤,那个效率就不行了,干嘛我不一起拿,所以会用annotate...banner模型绑定newstitle字段,拿出来它叫news__title,我要给它换个名字叫news_title,这就是注释。

    1.6K30

    37.Django1.11.6文档

    实例化、处理和渲染表单Django 渲染一个对象时,我们通常: 在视图中获得它(例如,数据库获取) 将它传递给模板context 使用模板变量将它扩展为HTML 标记 除了几个关键点不同之外...当我们实例化表单时,我们可以选择让它为空还是预先填充它,例如使用: 来自一个保存后模型实例数据(例如用于编辑管理表单) 我们其它地方获得数据 从前面一个HTML 表单提交过来数据 获取HTML...选择验证后端 用户登录时,用户ID和用于身份验证后端保存在用户会话。 这允许相同身份验证后端在将来请求获取用户详细信息。 ...这是必需。 InlineModelAdmin.fk_name 模型名称。 在大多数情况下,这将自动处理,但如果同一父模型有多个,则必须显式指定fk_name。...覆盖此方法以编程方式确定最小内联表单数。 例如,这可以基于模型实例(作为关键字参数obj传递)。 使用具有两个或多个模型与同一个父模型 有时可能有多个到同一个模型。

    24.3K80

    Django模型

    Django模型 Django模型定义在models.py文件。模型是MVTM,也相当于MVCM。 在Django,模型必须继承自Model类。... 这个东西,通常都是在业务逻辑层面来实现,而不是在数据库实现。但是通常大家学习数据库课程,都会有数据库设计范式,其中有个第三范式就是专指约束。在这里只是简单介绍一下。...choices参数就是我们定义二元组(GENDER_CHOICES)获取值。二元组第一个值会储存在数据库,而第二个值将只会用于在表单显示。...设置时候需要制定另一张表关联字段,但是在Django里并没有指定。...这是因为Django会默认指定另外一张表id作为关联字段。如下图所示: 可以看到peopleinfo这张表键名称是book_id

    1.9K20

    Django 3.1 官网学习路线

    字段还可以有各种可选参数;在本例,我们将投票默认值设置为 0。 最后,请注意使用定义了关系。这告诉 Django 每个选择都与一个问题相关。...按照惯例,Django 会将"_id"附加到外字段名。(是的,你也可以重写这个。) 关系是通过约束来显式。...不要担心可延期部分;它告诉 PostgreSQL 在事务结束之前不要强制执行。...OK migrate 命令获取所有还没有应用迁移(Django 跟踪哪些迁移是使用数据库名为 django_migrations 特殊表应用),并在数据库运行它们——本质,就是将您对模型所做更改与数据库模式同步...“添加选择表单如下所示: 在该表单,“Question”字段是一个选择框,包含数据库每个问题。Django 知道一个应该在管理中表示为一个框。在我们例子,目前只存在一个问题。

    8.2K10

    django_2

    dept 部门表:主表 emp 员工表:表 两张中有级联关系 带主键表是主表 带表是表 关联关系放在从表 (团员找班长--> 快) sql优化 一对多模型关系: class Grade...根据属性类型确定以下信息 ·当前选择数据库支持字段类型 ·渲染管理表单时使用默认html控件 ·在管理站点最低限度验证 ·django会为表增加自动增长主键列,每个模型只能有一个主键列...models.CharField(max_length=16) s_grade = models.ForeignKey(Grade) 使用: 模型类名__属性名__比较运算符,实际就是处理数据库...join Grade ---g_name Student---》s_name s_grade() gf = Student.objects.filter...根据属性类型确定以下信息 ·当前选择数据库支持字段类型 ·渲染管理表单时使用默认html控件 ·在管理站点最低限度验证 ·django会为表增加自动增长主键列,每个模型只能有一个主键列

    3.6K30

    Django源码学习-25-ContentType

    Django网络应用开发5项基础核心技术包括模型(Model设计,URL 设计与配置,View(视图)编写,Template(模板)设计和Form(表单)使用。...在django,有一个记录了项目中所有model元数据表,就是ContentType,表中一条记录对应着一个存在model,所以可以通过一个ContentType表id和一个具体表id找到任何记录...,及先通过ContenType表id可以得到某个model,再通过modelid得到具体对象。...通过model_class就可以获取对应类。如果自定义model,如果有关联到这个ContentType,就能找到对应model名称。 ?...1.ContentType.model_class(): 获取当前ContentType类型所代表模型类。

    66730

    06.Django基础五之django模型层(二)多表操作

    一 创建模型 表和表之间关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束区别,一对一约束是在一对多约束加上唯一约束...注意事项: 表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加 对于字段,Django 会在字段名添加"_id" 来创建数据库列名...但是我们就不能使用ORM相关方法了,所以我们单纯换成一个其他字段类型,只是单纯存着另外一个关联表主键值是不能使用ORM方法。...例如,如果 Article model 做一下更改:     那么接下来就会如我们看到这般: 在这里我们补充一点,因为你很快就要接触到了,那就是form表单里面的button按钮和form表单外面的button...我们可以直接django提供接口中获取数据库连接,然后像使用pymysql模块一样操作数据库。

    2.7K20

    Django学习-第七讲:django 常用字段、字段属性,和表关系、操作

    因此在底层,Django为Article表添加了一个属性名_id字段(比如author字段名称是author_id),这个字段是一个,记录着对应作者主键。...以后通过article.author访问时候,实际是先通过author_id找到对应数据,然后再提取User表这条数据,形成一个模型。...即只要这条数据引用了那条数据,那么就不能删除外那条数据。 3.SET_NULL:设置为空。如果那条数据被删除了,那么在本条数据就将这个字段设置为空。...如果那条数据被删除了,那么本条数据就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。 5.SET():如果那条数据被删除了。...那么将会获取SET函数值来作为这个值。SET函数可以接收一个可以调用对象(比如函数或者方法),如果是可以调用对象,那么会将这个对象调用后结果作为值返回回去。

    4K30

    django restframework serializer 增加自定义字段操作

    在使用django restframework serializer 序列化在django定义model时,有时候我们需要额外在serializer增加一些model没有的字段。...假设现在有一个Animal模型,其中有name, type, country字段,country为。我们在序列化Animal时,需要额外增加countryarea信息。...方法一修改数据库,利用model 这里就不多解释,主要来说第二种,不修改djangomodel,直接使用SerializerMethodField(method_name=None)字段。...(roles) return roles 相反场景:我们提交表单数据存在于多表(因为表中含有多对多字段),如何验证所有字段,并保存完整数据到各表。...(**validated_data) # ...操作 return instance def update(self, instance, validated_data): field

    3.6K40

    django 1.8 官方文档翻译:2-1-1 模型语法

    如果设置了choices ,默认表单将是一个选择框而不是标准文本框,而且这个选择选项就是choices 选项。...中介模型有一些限制: 中介模型必须有且只有一个到源模型(上面例子Group),或者你必须使用ManyToManyField.through_fields 显式指定Django 应该使用。...如果你模型存在超个一个,并且through_fields没有指定,将会触发一个无效错误。 对目标模型有相同限制(上面例子 Person)。...对于通过中介模型与自己进行多对多关联模型,允许存在到同一个模型两个,但它们将被作为多对多关联关系两个(不同)方面。...Changed in Django 1.7: 在Django 1.6 及之前版本,中介模型禁止包含多于一个

    5K20

    django 字段类型_access数据库类型是

    常用字段 (1) AutoField 自增整型字段,必填参数primary_key=True,则成为数据库主键,无该字段时,django会自动创建主键id字段。...l 存储在数据库所有文件都是该文件路径(相对于MEDIA_ROOT)。如果ImageField调用了,则mug_shot可以使用来获取摸板图像绝对路径。...默认表单格式为TextInput。 (18) TextField 文本字段。默认表单小部件是Textarea,如果指定max_length属性,将反映在Textarea自动生成表单字段。...SET_NULL:删除时把置为null,当null=True时才可以使用。 SET_DEFAULT:把置为默认值,必须要设置默认值时才可以使用。...(24) OneToOneField 一对一关系关系,概念与带有unique=TrueForeignKey相似,但是在关系另一侧(主表数据)直接返回单个对象。

    3.9K30

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

    现在先来试试重新排序表单字段。...在这个表单,Question字段是一个select选择框,包含了当前数据库中所有的Question实例。Django在admin站点中,自动地将所有的关系展示为一个select框。...在我们例子,目前只有一个question对象存在。 请注意图中绿色加号,它连接到Question模型。每一个包含关系对象都会有这个绿色加号。...点击它,会弹出一个新增Question表单,类似Question自己添加表单。填入相关信息点击保存后,Django自动将该Question保存在数据库,并作为当前Choice关联对象。...通俗讲就是,新建一个Question并作为当前Choice。 但是,实话说,这种创建方式效率不怎么样。

    3.6K60

    玩了下flask,很轻量级一个web开发框架

    url 路由也是很方便 和django差不多,直接用表示变量就好,默认是字符串,可以使整形,浮点,uuid,path, 如果在装饰器不设置methods的话默认是get提交方式 *** 路由重定向...,直接传递,然后在模板文件中用模板语言调用即可 模板可以一样用到切片操作,很方便 语法都是和python语法一样,非常友好 *** 过滤器也是和django一样 | 后面接着过滤器名称就好...(db.String(16),unique=True) # 定义字段,用户类型只能唯一 class User(db.Model): __tablename__=’users’ id=db.Column...(db.Integer,primary_key=True) name=db.Column(db.String(16),unique=True) # 用上面表id来表示 role_id=db.Column...(db.Integer,db.ForeignKey(‘roles.id’)) # *** orm增删改查 *** db.session.commit() 提交 db.session.delete

    1.1K30

    Python面试题:Django Web框架基础与进阶

    一、基础问题概览Django架构与组件:MVC与MTV:解释DjangoMTV(Model-Template-View)架构与传统MVC架构区别。...数据库操作:ORM:描述Django ORM基本使用,包括定义模型、执行CRUD操作、查询过滤等。数据库迁移:解释Django数据库迁移机制,演示如何创建、应用、回滚迁移。...二、进阶问题概览中间件与信号:中间件:描述中间件作用、生命周期及其在请求处理过程位置,编写自定义中间件示例。信号:解释Django信号机制,列举常用信号类型,演示如何发送、接收信号。...表单与验证:表单类:阐述Django表单定义、字段类型、验证规则、绑定数据、清洗数据等过程。自定义验证:演示如何表单字段添加自定义验证方法,处理复杂验证逻辑。...规避:遵循数据库设计原则,合理使用、多对多关系、索引,避免数据冗余。模板过度嵌套与逻辑混杂:误区:在模板编写过多业务逻辑,导致模板层次过深、可读性差。

    22310

    如何使用 Django 更新模型字段(包括字段)

    本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决字段更新方法,特别是使用 attrs 方式实现。1. 简介Django 模型是应用程序管理数据核心部分。...下面我们详细探讨这种更新方式:使用 attrs 方式更新字段在 Django ,可以直接通过设置字段方式来更新模型关联。...这种方式不需要每次都查询表(例如 Student 表)对象,而是直接使用 ID 进行更新操作。...总结与实践建议在本教程,我们深入探讨了如何使用 Django 更新模型字段,特别是处理字段更新方法。...希望本教程能够帮助你理解和应用 Django 模型字段更新技巧,提升你在开发过程效率和数据管理能力。在实际应用,根据具体情况选择合适更新方法,以确保应用程序稳定性和性能优化。6.

    21610

    关于“Python”核心知识点整理大全59

    下面来修改模型Topic,在其中添加一个关联到用户。这样做后,我们必须对数据库 进行迁移。最后,我们必须对有些视图进行修改,使其只显示与当前登录用户相关联数据。 1....添加了字段owner,它建 立到模型User关系。...在3处,Django给我 们提供了两种选择:要么现在提供默认值,要么退出并在models.py添加默认值。在4处,我们 选择了第一个选项,因此Django让我们输入默认值(见5)。...代码 Topic.objects.filter(owner=request.user)让Django数据库获取owner属性为当前用户 Topic对象。...= 'POST': # 初次请求,使用当前条目的内容填充表单 --snip-- 我们获取指定条目以及与之相关联主题,然后检查主题所有者是否是当前登录用 户,如果不是,就引发Http404

    13710

    django_mysql_配置

    verbose_name='描述信息') hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # ...2) django会为表创建自动增长主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长主键列。...默认创建主键列属性为id,可以使用pk代替,pk全拼为primary key。 3) 字段类型 ? 4) 选项 ?...null是数据库范畴概念,blank是表单验证范畴 5) 一般我用CASCADE 在设置时,需要通过on_delete选项指明主表删除数据时,对于引用表数据如何处理,在django.db.models...包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除外数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被应用数据 SET_NULL

    1.6K10
    领券