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

Django ModelForm显示外键的模型字段,而不是对象id

Django ModelForm是Django框架中的一个表单类,用于快速生成表单并与数据库模型进行交互。当模型中存在外键字段时,默认情况下,ModelForm会以对象的id值来显示外键字段。如果希望显示外键的模型字段而不是对象id,可以通过以下步骤实现:

  1. 在定义ModelForm时,通过fields属性指定需要显示的字段列表。确保包含外键字段。
  2. 在模板中,使用form.field_name来显示外键字段的模型字段。

下面是一个示例:

代码语言:txt
复制
# models.py
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)

# forms.py
from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ['title', 'author']  # 包含外键字段author

# views.py
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()
            return redirect('book_list')
    else:
        form = BookForm()
    return render(request, 'create_book.html', {'form': form})

# create_book.html
<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">保存</button>
</form>

在上述示例中,Book模型有一个外键字段author,BookForm中通过指定fields属性包含了外键字段author。在模板中使用{{ form.as_p }}来显示表单字段,这样就会显示外键的模型字段而不是对象id。

关于Django ModelForm的更多信息,可以参考腾讯云的相关产品文档: https://cloud.tencent.com/document/product/1081/50042

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

相关·内容

django中ModelForm多表单组合的解决方案

而django对表单的支持力度非常大,我们用不着在浏览器端的html文件里写大量代码,再到web端去匹配form里的id/name/value、验证规则,再与持久层数据库比较并做操作。...那么,一个模型代表着RDS中的一张表,模型的实例代表着关系数据库中的一行,而form如何与一行相对应呢?...中告诉django需要在表单中创建哪些字段。...例如,我们希望录入合同,其中合同Model中还有地址Model和项目Model,而项目Model中又有地址Model,等等。 当然,我们有很多种实现的方案,但是,前面三部分说了那么多,不是浪费口水的。...'].save()           #从项目表单中获取到模型,先把地址的id赋到外键上再保存           project = context['projectForm'].save(commit

3.4K20

Django模型最佳实践

将QuerySet的exists()方法的返回值用于if条件。 用DecimalField来存储货币相关数据而不是FloatField。 定义__str__方法。 不要将数据文件放在同一个目录中。...模型定义参考 字段 对字段名称的限制 字段名不能是Python的保留字,否则会导致语法错误 字段名不能有多个连续下划线,否则影响ORM查询操作 Django模型字段类 字段类 说明 AutoField...default 字段的默认值 editable 字段在后台模型管理或ModelForm中是否显示,默认为True error_messages 设定字段抛出异常时的默认消息的字典,其中的键包括null...on_delete:外键关联的对象被删除时对应的动作,可取的值包括django.db.models中定义的: CASCADE:级联删除。...PROTECT:抛出ProtectedError异常,阻止删除引用的对象。 SET_NULL:把外键设置为null,当null属性被设置为True时才能这么做。

2.3K40
  • Django中使用ModelForm保存数据

    相对来说,使用ModelForm保存数据在Django中算是比较简单的。...主要原因是ModelForm是建立在Django的模型(Model)之上的,它可以自动根据模型的定义生成表单,包括字段和验证规则。这样可以大大简化开发人员处理表单数据的工作。...Django的表单系统还提供了很多便捷的功能,比如字段类型的自动转换、数据验证、错误提示等,使得开发者能够更专注于业务逻辑的实现而不是处理表单数据的细节。...1、问题背景在 Django 中,我创建了一个扩展自 Django User 的 Student 模型,它是一个外键,指向另一个模型,同时它有一个名为 year 的整数字段。...我尝试保存一个包含两个字段的表单,一个字段是课程 ID,另一个字段是整数字段 year。

    12310

    Django之Model操作数据库详解

    Django ORM框架的功能: 建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。 根据设计的模型类生成数据库中的表格。 通过方便的配置就可以进行数据库的切换。...=2) #创建书的出版社信息,其与出版社的外键关系为一对多,所以用外键 publish = models.ForeignKey(Publish) #创建书的出版日期...7. values():     values(fields, *expressions)         返回一个包含数据的字典的queryset,而不是模型实例。        ...每个字典表示一个对象,键对应于模型对象的属性名称。...如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。

    7.1K10

    【云+社区年度正文】Django从入门到精通No.2----模型

    models.Model类,然后我们会使用字段来对数据进行记录,django中有很多字段,如下: 字段类 默认小组件 说明 AutoField N/A 根据 ID 自动递增的 IntegerField,...ImageField ClearableFileInput 所有属性和方法都继承自 FileField ,此外验证上传的对象是不是有效的图像。增加了 height 和 width 两个属性。...1.多对一 因为是关联关系,所以我们必须指定两个类来进行相互操作,这里涉及到一个外键的操作,即ForeignKey字段,而且外键要定义在多的一方。...db_constraint=True # 是否在数据库中创建外键约束 parent_link=False # 在Admin中是否显示关联数据 2.多对多 多对多的表...,必须设中间关联表,关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键。

    2.1K00

    Django 学习笔记之模型高级用法(上)

    2.1 ForeignKey 1) on_delete 在 Django 2.0 中,设置外键时需要添加一个 on_delete选项。外键本身涉及到两个表的数据,况且外键在数据库中是有约束行为。...SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。 SET(): 自定义对应的实体的值。...2)limit_choices_to 该参数用于限制外键所能关联的对象,只能用于 Django 的 ModelForm(Django的表单模块)和 admin 后台,对其它场合无限制功能。...4) related_name 用于关联对象反向引用模型的名称。主要用于反向查询,即外键源模型实例通过管理器返回第一个模型的所有实例。...用于从目标模型反向过滤模型对象的名称。

    2K30

    Django基础——ORM字段和字段参数

    ForeignKey --> 外键     ForeignKey 字段的参数;     a.to  --> 设置要关联的表;     b.to_field -->设置要关联的表的字段     ...一对多(出版社和书);1对多  ,外键通常设置在多的那一边; publisher = models.ForeignKey(to="Publisher") 数据库中实际 生成的是一个 publisher_id...#在数据库里面生成的字段为 publisher_id 是出版社的id #Book.object.publisher 为该书对应的出版社的对象; def __str__(self): return...' # 书和出版社是,1对1的(ForeignKey(to=)),是需要添加外键的 # 而书和作者是多对多的,一本书可以有多个作者,还有一个作者也可能有多本书,即多对多的时候用(ManyToManyField...当 一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁   把不怎么常用的字段 单独拿出来做成一张表 然后用过一对一关联起来 2.

    1.6K20

    37.Django1.11.6文档

    但有一个例外,对于ForeignKey你可以使用字段名加上_id 后缀。 在这种情况下,该参数的值应该是外键的原始值。...指示用户的账号是否激活。 我们建议您将此标志设置为False而不是删除帐户;这样,如果您的应用程序对用户有任何外键,则外键不会中断。 它不是用来控制用户是否能够登录。 ...方法允许覆盖外键字段的默认窗体字段。 ...例如,这可以基于模型实例(作为关键字参数obj传递)。 使用具有两个或多个外键的模型与同一个父模型 有时可能有多个外键到同一个模型。 ...这是因为,就管理而言,through只是一个具有两个外键字段而不是多对多关系的模型。 在所有其他方面,InlineModelAdmin与任何其他方面完全相同。

    24.4K80

    Django中ORM操作

    注意对象集合调用values(),正向查询是外键字段__XX,而反向是小写表名__YY看起来比较容易混淆; books=models.Publish.objects.filter(name__contains....外键.关联表字段,values(外键字段__关联表字段) 多对多:外键字段.all() 反向连表操作总结: 通过value、value_list、fifter 方式反向跨表:小写表名...,外键__外键列,反向是小写的表名 UserInfo.objects.values_list('nid','ug_id','ug__title') 反向连表: 反向操作无非2种方式: 1、通过对象的形式反向跨表...:小写表面 _set().all() 2、通过 value 和 value_list 方式反向跨表:小写表名__字段 小写的表名_set 得到有外键关系的对象 obj = UserGroup.objects.all...().first() result = obj.userinfo_set.all() [userinfo对象,userinfo对象,] 小写的表名 得到有外键关系的列 #因为使用values取值取得是字典的不是对象

    4.8K10

    Django学习笔记之ORM字段和字段参数

    字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。 几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。...通常,一个模型(model)映射到一个数据库表, 基本情况: 每个模型都是一个Python类,它是django.db.models.Model的子类。 模型的每个属性都代表一个数据库字段。...Django Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息 b....lambda : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root') db_constraint=True # 是否在数据库中创建外键约束...invite_reason = models.CharField(max_length=64) db_constraint=True, # 是否在数据库中创建外键约束

    5.1K10

    django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单

    这些通用的视图将自动创建一个ModelForm,只要它们能知道使用哪一个模型类: 如果给出model属性,则使用该模型类。 如果get_object() 返回一个对象,则使用该对象的类。...DeleteView): model = Author success_url = reverse_lazy('author-list') 注 这里我们必须使用reverse_lazy() 而不是...Changed in Django 1.8: 省略fields 属性在以前是允许的,但是导致表单带有模型的所有字段。...模型和request.user 为了跟踪使用CreateView 创建一个对象的用户,你可以使用一个自定义的ModelForm 来实现这点。...首先,向模型添加外键关联: #models.py from django.contrib.auth.models import User from django.db import models class

    1.9K20

    Django中ORM介绍和字段及其参数

    关系字段 ForeignKey   外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。   ...to="User", to_field="id", on_delete=models.SET(func) ) db_constraint:是否在数据库中创建外键约束...Model 元数据就是 "不是一个字段的任何数据" -- 比如排序选项, admin 选项等等. 下面是所有可能用到的 Meta 选项. 没有一个选项是必需的....若提供该选项, 该模块将拥有一个 get_latest() 函数以得到 "最新的" 对象(依据那个字段): get_latest_by = "order_date" managed 由于Django会自动根据模型类生成映射的数据库表...ordering 这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。

    2.8K80

    django创建表单以及表单数据类型和属性

    unique 外键关系 插入信息 models.UserInfo.objects.create(name='张三',age=12) models.Private.objects.create(salary...再选择其中的g对象,再进行add添加|删除|查询girl的id 添加(add) models.Boy1.objects.filter(bname='男1').first().g.add(1,2,3,4,5,2...):字符串类型对应信息是不是邮箱格式进行验证 IPAddressField(Field):字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 GenericIPAddressField...(字符串) height_field=None:上传图片的宽度保存的数据库字段名(字符串) 五.djamgo只在admin中生效的属性 verbose_name:Admin中显示的字段名称 blank:...Admin中是否允许用户输入为空 editable:Admin中是否可以编辑 help_text:Admin中该字段的提示信息 choices:Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作

    78830

    django 1.8 官方文档翻译: 2-3-1 模型实例参考

    之前加载的关联实例,如果关联的值不再合法,将从重新加载的实例中删除。例如,如果重新加载的实例有一个外键到另外一个模型Author,那么如果 obj.author_id !...这个键用于整个模型出现的错误而不是一个特定字段出现的错误: from django.core.exceptions import ValidationError, NON_FIELD_ERRORS try...在调用save() 之前无法知道ID 的值,因为这个值是通过数据库而不是Django 计算。...通过将更新基于原始字段的值而不是显式赋予一个新值,这个过程可以避免竞态条件而且更快。Django 提供F 表达式 用于这种类型的相对更新。...最明显的是在Django 的Admin 站点显示一个对象和在模板中插入对象的值的时候。 所以,你应该始终让__str__() 方法返回模型的一个友好的、人类可读的形式。

    1.9K10

    Django学习之八:forms组件【对

    form_obj.is_valid() 和 form_obj.errors 的调用执行 都会隐式触发form_obj的校验过程;而想显示的调用校验可以通过from_obj.full_clean()。...而全局不是单个字段的,所以Key是不是一个字段名而是‘__all__’ 作为字典key。...就算不是modelform,普通的form,是怎么将上传的文件保存在哪里呢? 猜测,这些可能就是UploadFile对象封装了这些繁琐的事情了吧?后续验证。...form.fields是一个字典类型,存放这form定义时的field对象,注意不是boundfield对象(也就不是迭代form对象的产物)。...添加它的作用,主要是用于方便测试后端form对象对表单的校验空值的功能,而不是前端就提示了。 总结 发现form就是容器,存放field对象。form和field看成两个Level。

    2.2K30

    Django 系列博客(十三)

    Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数。 ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True。...以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能 - 参数: path...数据库中字段【年】部分是否可以建立唯一索引 verbose_name Admin中显示的字段名称 blank Admin中是否允许用户输入为空 editable...ForeignKey 外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。...publish = ForeignKey(Blog, related_name='booklist') db_constraint 是否在数据库中创建外键约束,默认为 True。

    1.1K30

    【玩转全栈】----基于ModelForm完成用户管理页面

    在Django开发中,ModelForm 是 Django 提供的一个用于简化表单处理的工具,它能通过模型(Model)自动生成表单,而不需要手动定义每个字段。...ModelForm 与一般表单的区别: 特性 ModelForm 一般表单 自动与数据库字段绑定 自动与模型字段绑定 不会自动绑定,字段需要手动定义 字段映射 字段通过模型自动映射到表单字段 需要手动创建字段并定义属性...更新而来,继承了Form,但会更加便捷一点 ModelForm 与传统 Form 的区别: 特性 ModelForm 传统 Form 关联模型 自动与模型字段关联 不关联模型,需要手动定义字段 字段定义...但我们想要的效果是部门处要是具体的部门,而不是对应的id,因为ModelForm在循环取值过程中,取到的是一个一个的对象,若直接print这个对象,就会是这样的效果: 可以在部门表后面加上...将用户点击编辑行的id传给视图函数,创建实例传参instance=根据id获取到的数据对象,这样即可在输入框中显示原始数据;用UserForm接收用户提交的数据,使用ModelForm的form.save

    3700
    领券