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

从get_or_create结果分配时,ForeignKey不保存

是指在使用Django框架中的get_or_create()方法时,如果创建一个新的对象并且该对象包含一个ForeignKey字段,该字段的值不会被保存。

ForeignKey是Django中的一种关联字段,用于建立模型之间的关系。当使用get_or_create()方法时,该方法会尝试根据给定的参数获取一个对象,如果不存在则创建一个新的对象。然而,在创建新对象时,如果该对象包含一个ForeignKey字段,该字段的值不会被保存到数据库中。

这是因为get_or_create()方法只会在创建新对象时保存非关联字段的值,而不会自动保存关联字段的值。如果想要保存ForeignKey字段的值,需要在创建对象后手动保存。

以下是一个示例代码:

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

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

class ModelB(models.Model):
    model_a = models.ForeignKey(ModelA, on_delete=models.CASCADE)
    value = models.IntegerField()

# 使用get_or_create方法创建新对象
model_a, created = ModelA.objects.get_or_create(name='Object A')

# 创建一个新的ModelB对象,并设置ForeignKey字段的值
model_b = ModelB(model_a=model_a, value=10)

# 手动保存ModelB对象
model_b.save()

在上述示例中,我们首先使用get_or_create()方法获取或创建一个ModelA对象。然后,我们创建一个新的ModelB对象,并设置其model_a字段的值为之前获取或创建的ModelA对象。最后,我们手动保存ModelB对象,以保存ForeignKey字段的值。

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

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb_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
  • 分布式文件存储(CFS):https://cloud.tencent.com/product/cfs
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏引擎(GSE):https://cloud.tencent.com/product/gse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django ORM 知识概要

只有当字段设置了default参数才能使用 SQL等价物:SET DEFAULT。 SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。...自关联 写法一: modles.ForeignKey('self',verbose_name='自关联') 写法二: modles.ForeignKey('Model',verbose_name=...删除数据库表 导入数据 Django shell 导入数据 引入模型 调用模型对象的save方法 自己定义一个脚本批量导入数据 fixtures Django serialization -> model 保存...反向查询 annotate() 使用聚合计数,求和,平均数,raw() 执行原生SQL annotate()对分组后的结果进行统计 Model.objects.get().子表的表名 _set.all...() 返回QuerySet 的 API 获取对象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk() 创建对象 create

1.8K20

Django学习笔记之Django QuerySet的方法

以下也是作为我的文档阅读笔记,我记下了一些我以后可能会用到或者一些技巧性提升的东西,好,废话,正文开始: 首先,我们假设有以下两个model: class Entry(Model.models):...我读文档就这感觉。。后来发现是酱紫滴,一个复杂滴model可能你数据库中读出后根本不需要某些字段,读了又浪费时间浪费空间,怎么办?对!...only内的参数会立即返回,其他参数都会被defer,注意这里only的覆盖性~ 5、create(**kwargs) 创建并保存对象。...一般我们要新建一个model对象直接使用他的构造函数或者使用.语法赋值,最后调用.save()方法保存。...12、Avg、Count、Sum、Max、Min、StdDev、Variance 这些方法就是求数据的相应结果咯,比如avg就是平均值啦,嗯,基本都看得懂,除了后两个,一个是方差,一个是标准差,具体用法其实前文里有

57250

Django之model查select的用法

User.objects.all() # 匹配,对应SQL:select * from User where name = '运维咖啡吧' User.objects.filter(name='运维咖啡吧') # 匹配...limit 3; User.objects.all()[:3] # limit,取第三条以后的数据,没有对应的SQL,类似的如:select * from User limit 3,10000000,第...3条开始取数据,取10000000条(10000000大于表中数据条数) User.objects.all()[3:] # offset,取出结果的第10-20条数据(包含10,包含20),也没有对应...,里边里边的每条数据对应一个元组,当只查询一列,可以使用flat标签去掉元组,将每条数据的结果以字符串的形式存储在列表中,从而避免解析元组的麻烦 User.objects.values_list('username...import Http404 try: _t = User.objects.get(id=724) except User.DoesNotExist: raise Http404 get_or_create

73940

Django model select的各种用法详解

limit 3; User.objects.all()[:3] # limit,取第三条以后的数据,没有对应的SQL,类似的如:select * from User limit 3,10000000,第...3条开始取数据,取10000000条(10000000大于表中数据条数) User.objects.all()[3:] # offset,取出结果的第10-20条数据(包含10,包含20),也没有对应...from accounts_user User.objects.values_list('username', 'fullname') # filter单列、查询单列,正常values_list给出的结果是个列表...,里边里边的每条数据对应一个元组,当只查询一列,可以使用flat标签去掉元组,将每条数据的结果以字符串的形式存储在列表中,从而避免解析元组的麻烦 User.objects.values_list('username...import Http404 try: _t = User.objects.get(id=724) except User.DoesNotExist: raise Http404 get_or_create

1.1K30

Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

目录 Making queries 进行查询 创建一个对象(一条数据记录) 保存修改的表对象 保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) Retrieving...保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) 外键字段 ForeignKey 更新一个外键字段的写法和普通字段的完全一致,只需要将正确类型的对象分配给相关字段即可...list 强转成 bool 类型或者 作为 if 条件 如果 QuerySet 的查询结果至少有一个(数据对象),返回 True,如果没有结果,返回 False Caching and QuerySets...(cache) When QuerySets are not cached 不会保存 cache 缓存的情况 QuerySet 也总是会缓存他的查询结果,当只需要(取值)结果集中的一部分时,cache...,具体来说,这意味着使用数组切片或者索引限制查询结果集将不会保存缓存。

2.9K20

统计各个分类下的文章数

return self.title class Category(models.Model): name = models.CharField(max_length=100) 我们知道数据库取数据都是使用模型管理器...把这个统计数字保存到每一条 Category 的记录就可以了(当然并非保存到数据库,在 Django ORM 中是保存到 Category 的实例的属性中,每个实例对应一条记录)。...Post 记录的行数,也就是文章数,最后把这个值保存到 num_posts 属性中。...此外,我们还对结果集做了一个过滤,使用 filter 方法把 num_posts 的值小于 1 的分类过滤掉。...将 Annotate 用于其它关联关系 此外,annotate 方法局限于用于本文提到的统计分类下的文章数,你也可以举一反三,只要是两个 model 类通过 ForeignKey 或者 ManyToMany

95740

django 1.8 官方文档翻译: 2-2-1 执行查询

保存ForeignKey和ManyToManyField字段 更新ForeignKey字段的方式和保存普通字段相同–只是简单地把一个类型正确的对象赋值到字段中。...再次运行 QuerySet 就会重用这些缓存结果。 要牢住上面所说的缓存行为,否则在使用 QuerySet 可能会给你造成不小的麻烦。...更新非关系字段,传入的值应该是一个常量。更新 ForeignKey 字段,传入的值应该是你想关联的那个类的某个实例。...将某个特定的对象被关联对象集合中去除。 clear() 清空被关联对象集合。 想一次指定关联集合的成员,那么只要给关联集合分配一个可迭代的对象即可。它可以包含对象的实例,也可以只包含主键的值。...这一节提到的每一个 “reverse” 操作都是实时操作数据库的,每一个添加,创建,删除操作都会及时保存结果保存到数据库中。

4.3K20

浅谈Django QuerySet对象(模型.objects)的常用方法

4.order_by: 指定将查询的结果根据某个字段进行排序。如果要倒叙排序,那么可以在这个字段的前面加一个负号。 示例 def index2(request): # 1....如果在value中传递任何参数,那么会获取这个模型所有的值。返回的还是一个字典。 6:values_list: 类似于values。只不过返回的QuerySet中,存储的不是字典,而是元组。...# 获取id为1的数据 book = models.Book.objects.get(id=1) 13. create: 创建一条数据,并且保存到数据库中。...publusher = models.Publisher.objects.create(name=’知了出版社’) 14. get_or_create: 根据某个条件进行查找,如果找到了那么就返回这条数据...例如删除作者id大于等于3的数据 result = models.Author.objects.get(id__gte=4).delete() 删除数据一定要对你的表了如指掌,因为可能会牵连到很多其他数据

3.5K20
领券