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

如何使用Django模型在ExtJS网格中获取外键值而不是键?

在Django中使用ExtJS网格获取外键值而不是键,可以通过以下步骤实现:

  1. 首先,在Django的模型中定义外键关系。假设有两个模型:ParentChildChild模型有一个外键字段指向Parent模型。
代码语言:txt
复制
from django.db import models

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

class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
  1. 在Django的视图中,使用select_related方法来预先加载外键关联的数据,以避免多次查询数据库。
代码语言:txt
复制
from django.http import JsonResponse
from myapp.models import Child

def get_children(request):
    children = Child.objects.select_related('parent').all()
    data = [{'id': child.id, 'name': child.name, 'parent': child.parent.name} for child in children]
    return JsonResponse(data, safe=False)
  1. 在ExtJS中,使用Ext.data.Store来加载数据,并在模型中定义字段映射。
代码语言:txt
复制
Ext.define('Child', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id', type: 'int'},
        {name: 'name', type: 'string'},
        {name: 'parent', type: 'string', mapping: 'parent.name'}
    ]
});

var store = Ext.create('Ext.data.Store', {
    model: 'Child',
    proxy: {
        type: 'ajax',
        url: '/get_children/',
        reader: {
            type: 'json',
            rootProperty: ''
        }
    },
    autoLoad: true
});

var grid = Ext.create('Ext.grid.Panel', {
    store: store,
    columns: [
        {text: 'ID', dataIndex: 'id'},
        {text: 'Name', dataIndex: 'name'},
        {text: 'Parent', dataIndex: 'parent'}
    ],
    renderTo: Ext.getBody()
});

在上述代码中,mapping: 'parent.name'指定了parent字段的映射关系,将外键的名称作为字段的值。

这样,通过以上步骤,就可以在ExtJS网格中获取外键值而不是键。请注意,以上代码仅为示例,实际应用中需要根据具体情况进行调整。

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

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb-for-mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(TBC):https://cloud.tencent.com/product/tbc
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/virtual-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django数据库查询优化与AJAX

orm相关的数据库查询优化 惰性查询 惰性查询指当我们只查数据库不是用这些数据时,Django不会执行查询数据库的代码,目的是减少不必要的数据库操作,降低数据库的压力。...如: res = models.Book.objects.all()#只有当我们使用res时才会执行数据库查询的操作 all、only与defer all 拿到自己的所有的属性,但是没有与其他表建立的属性...select_related()括号内放多个字段,逗号隔开,会将多个字段关联的表与当前表拼成一张大表。...,特点:按步骤查询多张表,然后将查询结果封装到对象,给用户的感觉好像还是连表操作,括号内支持传多个字段,每放一个字段就会多走一条SQL语句,多查一张表。...AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 AJAX 最大的优点是不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

2.3K20

Django ORM

无名分组和有名分组反向解析 Django ORM ORM:对象映射关系程序 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了...ORM来创建确立表关系~ ORM创建字段的位置: 一对多:创建在多的一方 一堆一:创建在任何一方都可以,但是推荐创建在查询频率较高的表 多对多(两种方式): 自己创建第三张表 创建在任何一方都可以...,但是推荐创建在查询频率较高 # 创建书籍表 出版者表 作者表 # 先写表的基本结构,考虑表关系如何 # 书籍表 class Book(models.Model): name = models.CharField...path和re_path方法设计urls需注意: url的参数名要用尖括号,不是圆括号; 匹配模式的最开头不需要添加斜杠/,但建议以斜杠结尾; 使用re_path时不一定总是以结尾,有时不能加。...版本的变化,path和re_path写路由,django1.0版本用到的是url写路由,在前端页面写反向解析的时候用到的是url和Django1.0一样,一定要区别开来 上面用参数用数字代替,实际应用中经常使用数据主键值

4K10

Django项目知识点(四)

不是列表 request.body就是form表单的数据 Queryset Django ORM用到三个类:Manager、QuerySet、Model。...shell 调试 modelDjango通过给Model增加一个objects属性来提供数据操作大的接口。...file_url','file_name','title','desc','image_url').filter(is_delete= False) select_related() 如果我要拿这个模型通过绑定的另外一个模型...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库拉出到Python内存 说白了就是我从数据库拿东西,但是有些需要的字段没有,要通过绑定的的app的model拿。...但是名称又是app__字段来命名,这样我要改名称,而且拿第一次的model,放在python内存,再拿通过绑定的另一个model,又要执行第一次步骤,那个效率就不行了,干嘛我不一起拿,所以会用annotate

1.5K30

Django查询优化及ajax编码格式原理解析

与prefetch_related select_related括号内只能放字段,并且字段的类型只能是一对一或一对多,内部是联表操作,会将关联的表与当前表直接拼接起来,然后再执行查询操作,返回的结果也是一个...queryset,列表套数据对象,该数据对象获取当前表的数据或者关联表的数据,都不会再走数据库; prefetch_related 括号内外字段全部支持,内部是子查询,返回的结果也是一个queryset...对象,列表套数据对象,该数据对象获取当前表的数据或者关联表的数据,都不会再走数据库; 第一个方法耗时主要耗联表操作,第二个方法耗时主要耗查询次数; choices字段 用在一些字段数据是可以明确列出所有的可能的...‘name1′,’value1’) MyFormData.append(‘name2′,’value2’) 文件数据 如何获取input文件标签内文件数据 var MyFileobj = $...:false, # 浏览器不需要对数据进行任何处理 django能够识别对象的普通的键值对和文件对象,然后分别放到不同的方法POST和FILES; 以上就是本文的全部内容,希望对大家的学习有所帮助。

1.6K10

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

django是有时区的概念的,使用时要考虑到时区的问题,默认使用的是 UTC时区,分为 navie(没时区) 和 aware(有时区),如果项目不是国际的,可以我们将时区关闭,使用本地的时间。...比如我们想要在数据库映射的时候使用自己指定的表名,不是使用模型的名称。那么我们可以Meta类添加一个db_table的属性。...因此这里我们首先来介绍下Django使用。 类定义为class ForeignKey(to,on_delete,**options)。...第一个参数是引用的是哪个模型,第二个参数是使用引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...如果一个模型使用

3.9K30

Django模型

Django模型 Django模型定义models.py文件模型是MVT的M,也相当于MVC的M。 Django模型必须继承自Model类。... 这个东西,通常都是在业务逻辑层面来实现的,不是在数据库实现。但是通常大家学习的数据库课程,都会有数据库设计范式,其中有个第三范式就是专指的约束。在这里只是简单的介绍一下。...choices参数就是从我们定义的二元组(GENDER_CHOICES)获取值。二元组的第一个值会储存在数据库第二个值将只会用于表单显示。...对于一个模型实例,要获取该字段二元组相对应的第二个值,使用 get_FOO_display() 方法。例如:获取上面的性别信息,可以使用get_gender_display()方法。...设置的时候需要制定另一张表关联的字段,但是Django里并没有指定。

1.9K20

python技术面试题(九)

我们项目开发过程尽量少的使用,因为约束会影响插入和删除性能;使用缓存,减少对数据库的访问;需要多次连接数据库的一个页面,将需要的数据一次性的取出,减少对数据库的查询次数。...Redis总是一个字符串对象,值可以是字符串、列表、集合等对象,所以我们通常说的为字符串,表示的是这个对应的值为字符串对象,我们说一个为集合时,表示的是这个对应的值为集合对象。...hashtable 编码的哈希表对象底层使用字典数据结构,哈希对象的每个键值对都使用一个字典键值对。...其中InnoDB支持事务,支持约束,它还支持行锁(比如select…for update语句,会触发行锁,但是锁定的是索引不是记录)。MyISAM不支持事务,不支持,它是数据库默认的引擎。...任务发出者发出任务,放到中间人的消息队列(项目中使用redis数据库),然后执行者一监听到任务就立马执行。 7.Django中间件是如何使用的?

88240

Django之QuerySet详解

如果不传递任何值给values_list(),它将返回模型的所有字段,以模型定义的顺序。 常见的情况是获取某个模型实例的特定字段值。...这会生成一个复杂的查询并引起性能的损耗,但是以后使用关系时将不需要再次数据库查询。 下面的例子解释了普通查询和select_related()查询的区别。...当最初获取数据时不知道是否需要这些特定字段的情况下,如果正在使用查询集的结果,可以告诉Django不要从数据库检索它们。...唯一限制是它只能更新模型主表的列,不是关联的模型,例如不能这样做: >>> Entry.objects.update(blog__name='foo') # Won't work!...的ForeignKey使用SQL约束ON DELETE CASCADE,任何具有指向要删除的对象的的对象将与它们一起被删除。

2.3K20

Django 2.0 新特性 转

以前版本的django.conf.urls.url()方法变成了django.urls.re_path(),但为了向后兼容,旧的依然保留,不是立刻废弃。...4.小特性 django.contrib.admin后台 新的ModelAdmin.autocomplete_fields属性和ModelAdmin.get_autocomplete_fields()方法现在可以在外和多对多字段上使用...,现在它将返回配置TEMPLATES的多个DjangoTemplates引擎的第一个,不是弹出ImproperlyConfigured错误; 自定义模版标签现在接收强制关键字参数; Tests测试...改写为: models.Index(fields=['headline', '-pub_date'], name='index_name') 6. call_command()将验证它接收的选项 对于使用选项不是使用...SQLite现在支持约束 另外,Django2.0还废弃和移除了一些方法和属性。 总结: 好像也没多大变化,不是重度使用者,基本感受不出变化来,该怎么用还是怎么用,^-^!

2.6K20

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

无论如何,如果你这么做了,小心不要改变了调用签名——任何改变都可能阻碍模型实例被保存。尝试使用下面这些方法之一,不是重写init: 1....之前加载的关联实例,如果关联的值不再合法,将从重新加载的实例删除。例如,如果重新加载的实例有一个到另外一个模型Author,那么如果 obj.author_id !...如果你手工赋值一个自增主键的值,请确保不要使用一个已经存在的主键值!如果你使用数据库已经存在的主键值创建一个新的对象,Django 将假设你正在修改这个已存在的记录不是创建一个新的记录。...强制使用INSERT 或UPDATE 一些很少见的场景,需要强制save() 方法执行SQL 的 INSERT 不能执行UPDATE。或者相反:更新一行不是插入一个新行。...当你unpickle 它时,它将包含pickle 时模型的实例,不是数据库的当前数据。 你不可以不同版本之间共享pickles 模型的Pickles 只对于产生它们的Django 版本有效。

1.9K10

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

一 创建模型 表和表之间的关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束的区别,一对一的约束是一对多的约束上加上唯一约束...注意事项: 表的名称myapp_modelName,是根据 模型的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的 对于字段,Django 会在字段名上添加"_id" 来创建数据库的列名...定义好模型之后,你需要告诉Django _使用_这些模型。你要做的就是修改配置文件的INSTALL_APPSZ设置,在其中添加models.py所在应用的名称。...但是我们就不能使用ORM相关的方法了,所以我们单纯的将换成一个其他字段类型,只是单纯的存着另外一个关联表的主键值是不能使用ORM方法的。...,当然,可以加双下划线来连表获取其他关联表的数据,但是获取的其他关联表数据是你的这些model对象对应的数据,关联获取的数据可能不是你想要的最大值对应的那些数据 # 2 查询作者id大于2作者的姓名以及出版的书的最高价格

2.7K20

【Python全栈100天学习笔记】Day41 Django深入理解框架

实际的项目中,数据模型通常通过数据库实现持久化操作,关系型数据库在过去和当下都是持久化的首选方案,下面我们以MySQL为例来说明如何使用关系型数据库来实现持久化操作。...使用ORM完成模型的CRUD操作 了解了Django提供的模型管理平台之后,我们来看看如何从代码层面完成对模型的CRUD(Create / Read / Update / Delete)操作。...语句并获取对应的结果,这一点实际开发需要引起注意!...用DecimalField来存储货币相关数据不是FloatField。 定义__str__方法。 不要将数据文件放在同一个目录。...on_delete:关联的对象被删除时对应的动作,可取的值包括django.db.models定义的: CASCADE:级联删除。

2.2K30

django 关于User模型

对于一些想要删除账号的数据,我们设置这个值为False就可以了,不是真正的从数据库删除。 is_superuser:是否是超级管理员。如果是超级管理员,那么拥有整个网站的所有权限。...因为他们都是从User这个模型获取所有的数据。 2. 一对一: 如果你对用户验证方法authenticate没有其他要求,就是使用username和password即可完成。...但是想要在原来模型的基础之上添加新的字段,那么可以使用一对一的方式。...REQUIRED_FIELDS = [] # 重新定义Manager对象,创建user的时候使用telephone和 # password,不是使用username和password...如何使用这个自定义的模型:比如以后我们有一个Article模型,需要通过引用这个User模型,那么可以通过以下两种方式引用。 第一种就是直接将User导入到当前文件

1.1K30

Django之ORM数据库

(one-to-many),也被称作。...一对一:实质就是主外(author_id就是foreign key)的关系基础上,给加了一个UNIQUE=True的属性;              一对多:就是主外关系;(foreign key...(如何处理关系的字段如一对多的publisher和多对多的authors) #一对多(ForeignKey): #方式一: 由于绑定一对多的字段,比如publish,存到数据库的字段名叫...“插入和更新数据”小节,我们有提到模型的save()方法,这个方法会更新一行里的所有列。 某些情况下,我们只需要更新行里的某几列。...是Book模型price字段的平均值 aggregate()是QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。

2.5K10

Django(ForeignKey)操作以及related_name的作用

之前已经写过一篇关于Django的文章,但是当时并没有介绍如何根据对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息 首先我定义了两个模型,一个是老师模型,一个是学生模型,...,并获取老师的相关信息 返回一个teacher对象,接下来就是查询teacher相关联的学生对象,在这里有一个需要注意的点,django默认情况下每一个主表的对象都有一个是的属性,可以通过它查询到所有关于子表的信息...migrate 从上图可以看到和之前的_set操作的效果是一样的,这两个方法是相同的,所以如果觉得比较麻烦的话,可以定义主表的的时候,直接就给定义好名称使用related_name...上面的查询主要是通过主表查询子表的信息 下面说一下如何通过子表查询主表的相关信息,也就是查询一个学生所对应的老师的信息 首先需要先获取一个子表的对象,那么就可以通过定义时候的那个的字段名获取关于主表的信息了...比如我得到了一个student对象,然后我想要得到这个student对象对应的主表teache的信息的话,就使用 student.teacher 获取,其中这个teacher就是子表定义的字段

2K10

Django model,baseModel基类, migrate移行

复数名称用:verbose_name_plural管理画面标示的名称是这样的,默认加s图片4. default_related_name在外设置反向查询的字段名。...补充:on_delete在外必须设置,表示级联关系。 级联关系:例,主表数据删除后,参照表的键值如何处理。  限制 insert参照表的数据之前,主表必须先登录数据,以避免脏数据产生等。...DO_NOTHING:不会被级联。例:product被删,order的product不做任何处理SET_DEFAULT:配合default属性使用。...假设A表依赖B表,B记录删除,A表的字段重置为default属性设置的值。SET_NULL:配合NULL=True使用。...它必须在模型创建之前通过migrate模型上指定。

99830
领券