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

Django,DRF (& React)外键,如何显示Name值而不是外键id

Django是一个基于Python的开源Web应用框架,它提供了一套高效、灵活且易于使用的工具和API,用于快速开发Web应用程序。Django的主要特点包括强大的ORM(对象关系映射)系统、自动化的管理界面、灵活的URL路由配置、模板引擎、安全性等。

DRF(Django REST Framework)是Django的一个扩展库,用于构建基于RESTful架构的Web API。它提供了一组强大的工具和功能,使得开发者可以轻松地构建和管理Web API。DRF与React(一种流行的JavaScript库)结合使用,可以实现前后端分离的开发模式。

在Django中,外键是一种关系字段,用于建立不同模型之间的关联关系。默认情况下,外键字段在数据库中存储的是关联对象的主键(id),而不是关联对象的名称。如果想要在显示外键字段时显示关联对象的名称而不是id,可以通过以下步骤实现:

  1. 在定义模型时,使用related_name参数为外键字段指定一个名称,以便在后续的代码中引用。
  2. 在模型类中定义一个方法,用于返回外键对象的名称。
  3. 在模型类的Meta类中定义一个property,将上一步定义的方法作为属性。

下面是一个示例:

代码语言:txt
复制
from django.db import models

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

    def __str__(self):
        return self.name

class Product(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='products')

    def __str__(self):
        return self.name

    @property
    def category_name(self):
        return self.category.name

在上面的示例中,Product模型与Category模型建立了一对多的关系,category字段是一个外键字段。通过定义category_name方法和category_name属性,我们可以在显示Product对象时获取关联的Category对象的名称。

在Django中,推荐使用腾讯云的云服务器(CVM)来部署和运行Django应用。腾讯云的云服务器提供了高性能、可靠稳定的计算资源,适用于各种规模的应用。您可以通过以下链接了解更多关于腾讯云云服务器的信息:腾讯云云服务器

此外,腾讯云还提供了云数据库MySQL版(TencentDB for MySQL)作为Django应用的数据库存储解决方案。云数据库MySQL版提供了高可用、可扩展的MySQL数据库服务,适用于各种规模的应用。您可以通过以下链接了解更多关于腾讯云云数据库MySQL版的信息:腾讯云云数据库MySQL版

希望以上信息能够帮助您理解如何在Django中显示外键的名称而不是外键id。如果您有任何进一步的问题,请随时提问。

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

相关·内容

  • DRF中多对多ManytoMany字段的更新和添加

    orderId 是自动生成的UUID订单的区域是,下单人也是,菜品orderMenu是一个多对多字段(其实通过我查到的方法说的都是字段就可以实现但是个人觉得菜品和订单应该是多对多会比较好理解...as timezonefrom django.contrib.auth.models import Userfrom django.db import modelsfrom serverorders.models...', 'menu_id') verbose_name = '订单中间表' verbose_name_plural = verbose_name然后是定义了一个序列化器 serializer.py...in MenuSerializer(instance.orderMenu, many=True).data: # 实例Order的ordercenterthough_set查找表传入查找的字段并用...这里处理将orderBusinessArea设置为orderBusinessArea_id一样的 request.data['orderBusinessArea'] = request.data.get

    87420

    django序列化时使用的真实操作

    展示: 一般情况下序列化得到的的内容只是id: ... { fields: { uat_date: "2015-07-25", statu: "CG", name: "慢赢优化",...序列化时得到外的真实: ... { fields: { uat_date: "2015-07-25", statu: "CG", name: "慢赢优化", tester:...方法: 我序列化的是Content表,它含有一个关联的是Module表,1对多 我要先序列化Module表,然后序列化Content表的时候才可以使用到Module的真实 class ModuleManager...,要保证先序列化,如下依赖: class Content(models.Model): name = models.CharField(max_length=100) ......,大家都离不开对query结果集的序列化 嗯嗯嗯,一般我们都有DRF里面的序列化工具,但是django原生的serialize你们有 用过吗?????????????

    1.8K10

    django rest framework serializers解读

    serializers.fieild 我们知道在django中,form也有许多field,那serializers其实也是drf中发挥着这样的功能。我们先简单了解常用的几个field。...HiddenField HiddenField的不依靠输入,需要设置默认的,不需要用户自己post数据过来,也不会显式返回给用户,最常用的就是user!!...serializers 讲了那么多,终于要研究一下啦~ 其实,的field也比较简单,如果我们直接使用serializers.Serializer,那么直接用PrimaryKeyRelatedField...id,并不能获取到详细的信息,如果想要获取到具体信息,那需要嵌套serializer category = CourseCategorySerializer() 注意: 上面两种方式,都是正向取得...='父类目别', related_name='sub_cat')  现在获取编程语言下的课程,显然无法直接获取到python入门学习这个课程,因为它们两没有关系

    1.8K10

    Django REST framework+Vue 打造生鲜超市(十二) 十三、首页、商品数量、缓存和限速功能开发

    13.3.首页商品分类显示功能  首先是大类,然后里面有 商品商标(多个) 大类下的二级类 广告商品 所有商品 ?...serializers.ModelSerializer): #某个大类的商标,可以有多个商标,一对多的关系 brands = BrandSerializer(many=True) # good有一个...category,但这个键指向的是三级类,直接反向通过category(三级类),取某个大类下面的商品是取不出来的 goods = serializers.SerializerMethodField...配置redis缓存 使用django-redis第三方库:http://django-redis-chs.readthedocs.io/zh_CN/latest/#id8    (文档说明) ?  ..."CLIENT_CLASS": "django_redis.client.DefaultClient", } } } 13.8.drf的throttle设置api的访问速率

    1.9K70

    Django模型

    这个东西,通常都是在业务逻辑层面来实现的,不是在数据库中实现。但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的约束。在这里只是简单的介绍一下。...二元组的第一个会储存在数据库中,第二个将只会用于在表单中显示。对于一个模型实例,要获取该字段二元组中相对应的第二个,使用 get_FOO_display() 方法。...它的常用可以如下: CASCADE级联,删除主表数据时连通一起删除外表中数据 PROTECT保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL设置为NULL...,此选项会抛出IntegrityError异常 注意:我们在数据库中,设置的时候需要制定另一张表中关联的字段,但是在Django里并没有指定。...这是因为Django会默认指定另外一张表的id作为关联字段。如下图所示: 可以看到peopleinfo这张表中的键名称是book_id

    1.9K20

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

    比如我们想要在数据库映射的时候使用自己指定的表名,不是使用模型的名称。那么我们可以在Meta类中添加一个db_table的属性。...设置在django后台管理 admin 中显示的中文名称 class Book(models.Model): name = models.CharField(max_length=20,null...第一个参数是引用的是哪个模型,第二个参数是在使用引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个,记录着对应的作者的主键。...如果的那条数据被删除了,那么本条数据上就将这个字段设置为默认。如果设置这个选项,前提是要指定这个字段一个默认。 5.SET():如果的那条数据被删除了。

    3.9K30

    python技术面试题(九)

    在Redis中,总是一个字符串对象,可以是字符串、列表、集合等对象,所以我们通常说的为字符串,表示的是这个对应的为字符串对象,我们说一个为集合时,表示的是这个对应的为集合对象。...其中InnoDB支持事务,支持约束,它还支持行锁(比如select…for update语句,会触发行锁,但是锁定的是索引不是记录)。MyISAM不支持事务,不支持,它是数据库默认的引擎。...缓存雪崩指的是缓存中数据大规模的到期,查询数据量巨大,引发数据库压力过大。你也许会想,这不是缓存击穿吗?不是的,缓存击穿是用户查询同一条数据,缓存雪崩则是用户查询不同的数据。...7.Django中中间件是如何使用的? 1.首先需要定义一个中间件的工厂函数,然后返回一个可以被调用的中间件。...框架中的英文单词 Django中数据库的相关操作 DRF框架中的英文单词 重点内容回顾-DRF Django相关知识点回顾 美多商城项目导航帖 项目重要技术点介绍

    89740

    django admin中配置搜索域是一个时的处理方法

    会自动将该的行数据以str()化之后进行搜索,但其实并不是这样的,如果将加入到搜索域中,需要明确写出来。...,双下划线 list_display = ('book', 'category') # 在页面上显示的字段,若不设置则显示 models.py 中 __unicode__(self) 中所返回的...不应该只是一个model,该是另一个表的明确的一个字段。 所以我们需要指定特定的字段 “本表字段__所在表需查询字段”。...补充知识:Django的model中使用,但在页面上显示的是xxx_object?...,部署到云服务器上后,就在后台管理系统中看到B的属性一栏中f显示为A_Object,并没有显示A的属性——name

    3.8K20

    drf框架serializers中ModelSerializer类简化序列化和反序列化操作

    fields=('参与序列化和反序列的字段1','参与序列化和反序列的字段2') #fields='__all__' 为所有字段 # exclude = ('id...', 'is_delete') # 刨除某些字段 # depth = 1 # 跨表自动深度(展示表的所有字段) 注意点 其中fields与exclude不能共存 depth不能控制显示字段...,与相关的表会全部显示出来 二.利用模型类中的方法进行指导字典的生成 例如有两个模型A与B,他们的c字段有关联 modles.py class B(models.Model): name...= models.CharField(max_length=60) class A(models.Model): uid = models.ForeignKey(B,'id')...框架自带的Response 注意点:save源码中我们可以看到instance有调用updata方法,没有调用create方法.所以修改必须加instance参数,传的参数基本上是修改之前的对象 有关删除

    1.5K20

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

    本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决字段更新的方法,特别是使用 attrs 方式的实现。1. 简介Django 中的模型是应用程序中管理数据的核心部分。...当模型之间存在关系,特别是关系时,如何有效地更新这些关系是开发人员需要注意的重要问题之一。2. 设计模型我们将以一个简单的案例来说明如何更新模型字段。...对于字段的更新,我们可以使用直接设置字段的方式,不需要每次都查询表中的对象。...这种方式不需要每次都查询表(例如 Student 表)中的对象,而是直接使用ID 进行更新操作。...总结与实践建议在本教程中,我们深入探讨了如何使用 Django 更新模型字段,特别是处理字段更新的方法。

    18410

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

    models.CASCADE) 说明:mysql中,生成的列名称,会自动命名为:field_id,如上borrower field对应的mysql列为borrower_id class Musician...如果设置了该选项,那么默认的表单组件将变为一个select box,不是标准是text field,且将被限制从给定choice中选择choice。...myapp_album.artist列引用mapp_musician.auto_id字段的,即mapp_musician.auto_id为myapp_album表的。...SET_NULL 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外关联的记录的为null。当且仅当设置了null=True选项时可用。...SET_DEFAULT 删除被参照表的某条表记录,设置参照表中,同待删除记录存在外关联的记录的为默认。必须为列设置默认

    2.2K20

    Django ORM 多表操作

    目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加) 一对多( ForeignKey) 一对一 (OneToOneFeild) 多对多...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高的一方 一对多:字段建在多的一方 多对多:字段建在查询频率多的一方,在Django第三张表不需要创建...,自动创建 ps:字段不需要写表名_id后面的_id,ORM创建的时候自动添加了_id,以及以虚拟字段的形式存在 创建模型 '''models.py''' from django.db import...添加数据(添加) 一对多( ForeignKey) 方式一: 传对象的形式,返回的数据类型是对象,书籍对象 步骤: 获取出版社对象 给书籍的出版社属性 pulish 传出版社对象 '''test.py...__ == '__main__': main() 方式二: 传对象 id 的形式(常用) 一对多中,设置属性的类(多的表)中,MySQL 中显示的字段名是:属性名_id

    1.8K20

    使用Django实现把两个模型类的数据聚合在一起

    Django中想要把模型类聚合得到想要的数据可以用F对象。 比如有模型类A和B,A和B之间有关联在一起,A是子表,B是父表(反过来没试过。。...我看到网上有说F对象可以这样用F(‘b__id’) == F(‘模型类名小写__字段名’),此处是双下划线。 但是我用Django2.0时会报错。。真是搞不懂,后来我直接使用字段名居然可以,醉了。...Admin页面显示父表,编辑子表 默认情况下,ModelAdmin只允许您管理模型“本身”字段,不是相关模型.以下方法将实现,在应用类的列表管理显示页面,显示父表的字段;在编辑页面,父表对子表进行编辑...='班级') # ,这里关联模型Level与模型名称一样,不是全小写。...添加的是'模型类字段' # 如果是需要遵循这样的语法:本表字段__(双下划线)检表字段或检表的字段__最终表要显示的字段。

    1.4K20

    django_mysql_配置

    db_table = 'tb_books' # 指明数据库表名 verbose_name = '图书' # 在admin站点中显示的名称 verbose_name_plural...= verbose_name # 显示的复数名称 def __str__(self): """定义每个数据对象的显示信息""" return self.btitle...(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # is_delete = models.BooleanField(default...null是数据库范畴的概念,blank是表单验证范畴的 5) 一般我用CASCADE 在设置时,需要通过on_delete选项指明主表删除数据时,对于引用表数据如何处理,在django.db.models...中包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除外表中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被应用的数据 SET_NULL

    1.6K10
    领券