首页
学习
活动
专区
工具
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

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

相关·内容

djangoModelForm多表单组合解决方案

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模型最佳实践

将QuerySetexists()方法返回值用于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。

    11210

    Django之Model操作数据库详解

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

    7K10

    【云+社区年度正文】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模型动态修改参数,增加 filter 字段方式

    其它属性详情请查看:官方文档 关系字段 ForeignKey 类型在ORM中用来表示关联关系,一般把ForeignKey字段设置在 ‘一对多’中’多’一方。...( to="User", to_field="id", on_delete=models.SET(func) ) - db_constraint:是否在数据库中创建约束,默认为True。...through_fields=("author", "book")) # through_fields接受一个2元组('field1','field2'): # 其中field1是定义ManyToManyField模型名...(author),field2是关联目标模型(book)键名。...其他属性详情请查看:官方文档 以上这篇django模型动态修改参数,增加 filter 字段方式就是小编分享给大家全部内容了,希望能给大家一个参考。

    3.8K31

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

    2.1 ForeignKey 1) on_delete 在 Django 2.0 中,设置时需要添加一个 on_delete选项。本身涉及到两个表数据,况且在数据库中是有约束行为。...SET_DEFAULT: 置默认值,删除时候,字段设置为默认值,所以定义时候注意加上一个默认值。 SET(): 自定义对应实体值。...2)limit_choices_to 该参数用于限制所能关联对象,只能用于 Django ModelFormDjango表单模块)和 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

    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

    37.Django1.11.6文档

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

    24.3K80

    DjangoAutoField字段使用

    Django是一个机智框架】 默认情况下Djang会为ORM中定义每一张表加上一个自增ID列,并且用这个列来做主键;出于一个MySQL-DBA工作经历我觉得 Djanog还真是机智;这样么说主要是因为我遇到过许多主从延时问题...补充知识:Django中models下常用Field以及字段参数 一、常见FieldType数据库字段类型 1、AutoField:自增Field域,自动增加一个数据库字段类型,例如id字段就可以使用该数据类型...:删除关联数据: a、与之关联值设置为指定值,设置:models.SET(值) b、与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) 5、db_constraint:是否在数据库中创建约束...,默认为True,db_constraint一般使用在建立数据表连接关系当中(例如创建),如果使用False,则是限制了表之间没有关联,达到了软连接效果 五、元信息 ORM对应类里面包含另一个Meta...类,Meta类封装了一些数据库信息,主要字段如下: 1、db_table:ORM在数据库中表名默认为app_类名,可以通过db_table可以重写表名 2、index_together:联合索引,

    6.5K20

    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学习笔记之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.8K20

    django自定义非主键自增字段类型详解(auto increment field)

    1.django自定义字段类型,实现非主键字段自增 # -*- encoding: utf-8 -*- from django.db.models.fields import Field, IntegerField...,这个字段可以是主键,也可以不是主键,如果不是主键,则必须设置为一种“(key)” # (primary key)也是(key)一种,key还包括(foreign key)、唯一(unique...(表名__字段名=1).values('表名__字段名') limit_choices_to=None, # 在Admin或ModelForm显示关联数据时,提供条件: # 如: - limit_choices_to..., # 在Admin或ModelForm显示关联数据时,提供条件: # 如: - limit_choices_to={'nid__gt': 5} - limit_choices_to=lambda...db_table=None, # 默认创建第三张表时,数据库中表名称 ForeignKey(跨表操作): 跨表操作1 v = models.Host.objects.filter(nid__

    2.3K10

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

    unique 关系 插入信息 models.UserInfo.objects.create(name='张三',age=12) models.Private.objects.create(salary...再选择其中g对象,再进行add添加|删除|查询girlid 添加(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中显示选择框内容,用不变动数据放在内存中从而避免跨表操作

    78630
    领券