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

Django使用.set添加多个与m2m相关的模型记录很好,但是如何添加ids以外的其他模型字段呢?

在Django中,使用.set()方法可以方便地添加多个与m2m(多对多)相关的模型记录。但是,如果想要添加ids以外的其他模型字段,可以通过以下步骤实现:

  1. 首先,创建一个新的关联模型,该模型将包含m2m关系中的其他字段。例如,假设我们有两个模型:ModelAModelB,它们之间有一个m2m关系,并且我们想要在这个关系中添加一个额外的字段extra_field
代码语言:txt
复制
from django.db import models

class ModelA(models.Model):
    # 模型A的字段

class ModelB(models.Model):
    # 模型B的字段
    extra_field = models.CharField(max_length=100)
    a = models.ManyToManyField(ModelA)
  1. 接下来,在创建m2m关系时,使用through参数指定新创建的关联模型。
代码语言:txt
复制
class ModelB(models.Model):
    # 模型B的字段
    extra_field = models.CharField(max_length=100)
    a = models.ManyToManyField(ModelA, through='ModelC')
  1. 创建新的关联模型ModelC,并在其中定义其他字段。
代码语言:txt
复制
class ModelC(models.Model):
    a = models.ForeignKey(ModelA, on_delete=models.CASCADE)
    b = models.ForeignKey(ModelB, on_delete=models.CASCADE)
    extra_field = models.CharField(max_length=100)
  1. 现在,您可以使用.set()方法向m2m关系中添加记录,并在ModelC中设置其他字段的值。
代码语言:txt
复制
model_a_instance = ModelA.objects.get(id=1)
model_b_instance = ModelB.objects.get(id=1)

model_c_instance = ModelC.objects.create(a=model_a_instance, b=model_b_instance, extra_field='Some value')

model_b_instance.a.add(model_c_instance)

通过以上步骤,您可以在m2m关系中添加ids以外的其他模型字段,并通过ModelC模型来管理这些字段的值。

请注意,以上答案中没有提及任何特定的云计算品牌商,如腾讯云。如需了解腾讯云相关产品和产品介绍,请访问腾讯云官方网站。

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

相关·内容

Web | Django 与数据库交互,你需要知道的 9 个技巧

Django 中实现呢?...这意味着,当用户执行长时间运行的操作时,工作进程会被阻塞,完成之前,其他人无法使用它。 应该没有人真正在生产中只用一个工作进程来运行 Django,但是我们仍然希望确保一个查询不会浪费太多资源太久。...M2M 模型中的另一个常见模式是在两个字段一起作为一个唯一约束。...没有其他选择了吗?并不是,数据库为特定用例提供其他类型的索引也蛮多的。 从 Django 1.11 开始,有一个新的 Meta 选项用于在模型上创建索引。这给了我们探索其他类型索引的机会。...我们看看官网文档怎么说的: BRIN 设计用于处理非常大的表格,其中某些列与表格内的物理位置有一些自然的相关性。 要理解这个陈述,了解 BRIN 索引如何工作是很重要的。

2.9K40

django 1.8 官方文档翻译:2-1-1 模型语法

但是,有时你可能想知道更多成员关系的细节,比如成员是何时加入小组的。 对于这些情况,Django 允许你指定一个模型来定义多对多关系。 你可以将其他字段放在中介模型里面。...用法和其他字段类型一样:在模型里面做为类属性包含进来。 当某个对象想扩展自另一个对象时,最常用的方式就是在这个对象的主键上添加一对一关系。 OneToOneField要一个位置参数:与模型关联的类。...跨文件的模型 访问其他应用的模型是非常容易的。 在文件顶部你定义模型的地方,导入相关的模型来实现它。然后,无论在哪里需要的话,都可以引用它。...例如,在上面的代码中,如果去掉 related_name属性,在 ChildA中,m2m 字段的反向名称就是 childa_set;而 ChildB的 m2m 字段的反向名称就是 childb_set。...Django 1.7之前,继承多个含有id主键字段的模型不会抛出异常,但是会导致数据丢失。

5K20
  • odoo Actions学习总结

    所有Action都有两个强制属性: type 当前Action的类别,决定可以使用哪些字段以及如何解释action name action的名称,在客户端的界面中显示对action的简短用户可读描述...(以及可能的特定视图)(以及可能特定的模型记录)。...context (可选) 传递给视图的附加上下文 domain (可选) 隐式添加到所有视图搜索查询的过滤domain limit (可选) 默认情况下要在列表中显示的记录数。...所有这些类型都必须在生成的views列表中(至少有一个False view_id) view_ids M2M(技术上不是M2M:添加了一个sequence字段,可以只由一个视图类型组成,没有视图id)...如果您计划为模型允许多个视图,优先使用ir.actions.cact_window.wiew而不是view_ids action。

    2.7K30

    Django model update的各种用法介绍

    我们通常会给表添加三个默认字段 自增ID,这个django已经默认加了,就像上边的建表语句,虽然只写了username和is_active两个字段,但表建好后也会有一个默认的自增id字段 创建时间,用来标识这条记录的创建时间...(id=1) _t.role=Role.objects.get(id=3) _t.save() ForeignKey字段更新 假如我们的表中有Foreignkey外键时,该如何更新呢?...更新:m2m字段没有直接更新的方法,只能通过清空再添加的方法更新了 _t = User.objects.get(id=1) _t.groups.clear() _t.groups.add(*[1,3,5...]) _t.save() add():m2m字段添加一个值,当有多个值的时候可用列表,参照上边例子 _t.groups.add(2) _t.groups.add(Group.objects.get(id...=2)) remove():m2m字段移除一个值,,当有多个值的时候可用列表,参照上边例子 _t.groups.remove(2) _t.groups.remove(Group.objects.get(

    5.7K20

    Django 模型继承 BaseModel

    模型继承 模型继承在 Django 中与普通类继承在 Python 中的工作方式几乎完全相同,但也仍应遵循本页开头的内容。这意味着其基类应该继承自 django.db.models.Model。...当其用作其它模型类的基类时,它的字段会自动添加至子类。...这决定于你如何使用 '%(class)s' 和 '%(app_label)s' 构建关联名字和关联查询名。...但是,若你忘了使用它们,Django 会在你执行系统检查(或运行 migrate)时抛出错误。 如果你未指定抽象基类中的 related_name 属性,默认的反转名会是子类名,后接 '_set' 。...比如,在上述代码中,若省略了 related_name 属性, ChildA 的 m2m 字段的反转名会是 childa_set , ChildB 的是 childb_set。

    2.1K10

    Django篇(二)

    常见模型字段属性 模型属性命名: 1、不能是python保留关键字 2、不允许出现联系的下划线 字段类型 第一篇文章中我们仅仅了解了几个。 接下来我们重新了解一下有什么其他模型。...db_column:指定字段名字,未指定会使用属性名称。 null:若为True,表示该字段允许为空。 blank:这个属性与后台admin有关,是否允许在后台添加值的时候是否为空。...注意:我们在添加属性的时候如果影响了表结构,就需要迁移,default和blank不影响表结构。 更多模型字段,请参考Django官方文档。写的明明白白。...Q对象 以上我们都是单个条件进行查询,那如果多个条件呢? 我们可以在上面获取的对象再次进行筛选,也就是注意中说的那句话,但是很麻烦。 因此Django为我们提供了Q模块来帮助我们多条件查询。...我们添加的时候需要: 不过这里需要指定参数传递 student.objects.cretae(name='张三',age=18) 元选项 以上我们都是先创建好模型再去迁移,创建表, 试想,如果我们的数据库已经存在呢

    1.4K20

    django 1.8 官方文档翻译: 1-2-1 编写你的第一个Django应用,第1部分

    每个应用可以被多个项目使用,而且你可以打包和分发给其他人在他们的项目中使用。...项目是针对一个特定的 Web 网站相关的配置和其应用的组合。一个项目可以包含多个应用。一个应用可以在多个项目中使用。 你的应用可以存放在 Python path 中的任何位置。...在本例中,我们仅定义了一个符合人类习惯的字段名 Poll.pub_date 。对于模型中的其他字段,机器名称就已经足够替代人类名称了。 一些 Field 实例是需要参数的。...表名是自动生成的,通过组合应用名 (polls) 和小写的模型名 – poll 和 choice 。 ( 你可以重写此行为。) 主键 (IDs) 是自动添加的。( 你也可以重写此行为。)...欲了解更多有关如何使用双下划线来通过 API 执行字段查询的,请查看 字段查询 。 如需完整的数据库 API 信息,请查看我们的 数据库 API 参考 。

    99820

    Django admin管理工具的使用、定制及源码解析

    另外,默认可以点击每条记录第一个字段的值可以进入编辑界面。 我们可以设置其他字段也可以点击链接进入编辑界面。...但是,我们看到标题并不是我们想要的,那么如何设置标题呢? 添加一行代码:colored_status.short_description = u"状态" ? 在函数结束之后添加上面代码即可 ?...4.设置只读字段 在使用admin的时候,ModelAdmin默认对于model的操作只有增加,修改和删除,但是总是有些字段是不希望用户来编辑的。...我们如何修改这个app的名称达到定制的要求呢,其实Django已经在文档里进行了说明。 从Django1.7以后不再使用app_label,修改app相关需要使用AppConfig。...我们可以先自定义一个字段(上面提到过),让这个字段可以每次点击的时候帮我们做一些事情,比如:复制本条数据 自定义字段这个功能我们没问题,但是如何让它帮我们复制数据呢?

    4.1K40

    django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

    使用模型 一旦你定义了模型,就要通知Django启用这些模型,你要做的就是修改配置文件中的INSTALLED_APPS 设置,在其中添加models.py所在应用的名称。...但是有时,我们需要在两个 model 之间关联其他的数据。 例如,有这样一个应用:关注某个音乐小组,它拥有多个音乐家成员。...所以一个 model 中可以有多个 OneToOneField 字段。 跨文件访问 model 访问其他应用的 model 是非常容易的。在使用 model 之前将它导入到当前程序即可。...然而如果将它做为其他 model 的基类,那么该类的字段就会被添加到子类中。抽象基类和子类如果含有同名字段,就会导致错误(Django 将抛出异常)。...例如,在上面的代码中,如果去掉 related_name 属性,在 ChildA 中,m2m 字段的反向名称就是 childa_set;而 ChildB 的 m2m 字段的反向名称就是 childb_set

    3.1K30

    Django之model改update用法介绍

    我们通常会给表添加三个默认字段 - 自增ID,这个django已经默认加了,就像上边的建表语句,虽然只写了username和is_active两个字段,但表建好后也会有一个默认的自增id字段 - 创建时间...,用来标识这条记录的创建时间,具有auto_now_add属性,创建记录时会自动填充当前时间到此字段 - 修改时间,用来标识这条记录最后一次的修改时间,具有auto_now属性,当记录发生变化时填充当前时间到此字段...(id=1) _t.role=Role.objects.get(id=3) _t.save() ForeignKey字段更新 假如我们的表中有Foreignkey外键时,该如何更新呢?...更新:m2m字段没有直接更新的方法,只能通过清空再添加的方法更新了 _t = User.objects.get(id=1) _t.groups.clear() _t.groups.add(*[1,3,5...]) _t.save() add():m2m字段添加一个值,当有多个值的时候可用列表,参照上边例子 _t.groups.add(2) _t.groups.add(Group.objects.get

    76910

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

    执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项的详细内容,请见数据模型参考。...python对象,django使用一种直观的方式:一个模型类代表数据库的一个表,一个模型的实例代表数据库表中的一条特定的记录。...–使用字段的add()方法来增加关系的记录。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。...但仅由一个 model 类并不能知道其他 model 类是如何与它关联的,除非是其他 model 也被载入,那么这是如何办到的? 答案就在于 INSTALLED_APPS 设置中。

    4.4K20

    Django的Manager和QuerySet

    models本身没有什么需要多说的,Django 使用了一套直观的系统:一个模型类代表一张数据表,一个模型类的实例代表数据库表中的一行记录。 模型类的save方法可以插入,更新,删除数据。...那么是否可以查询数据呢?实际上由于“一个模型类的实例代表数据库表中的一行记录”,因此模型类的实例是不能起到查询数据的功能。 Manager 因此,我们要从数据库检索到数据,ORM就必须提供相应的方法。...在Django中,模型的Manager提供了接口,它赋予了 Django 模型操作数据库的能力。默认情况下,Django 为每个模型类添加了一个名为 objects 的 Manager。...不过,若你想将 objects 用作字段名,或想使用 objects 以外的 Manager 名字,就要在模型基类中重命名。...有关如何自定义Manager,在Django管理器中有详细说明。 QuerySet 一个 QuerySet 代表来自数据库中对象的一个集合。它可以有 0 个,1 个或者多个 filters。

    1.1K30

    15.Django基础十一之认证系统

    但是想要在原来模型的基础之上添加新的字段,那么可以使用一对一外键的方式。...比如我们想要在原来User模型的基础之上添加一个telephone和school字段。...# settings.py AUTH_USER_MODEL = 'youappname.User' 如何使用这个自定义的模型:比如以后我们有一个Article模型,需要通过外键引用这个User模型...比如,我想要加一个存储用户手机号的字段,怎么办?   聪明的你可能会想到新建另外一张表然后通过一对一和内置的auth_user表关联,这样虽然能满足要求但是有没有更好的实现方式呢?   ...,UserInfo表里就不需要有auth_user里重复的字段了,比如说username以及password等,但是还是可以直接使用这些字段的,并且django会自动将password进行加密   按上面的方式扩展了内置的

    2.2K20

    Django实战-生鲜电商-用户中心|商品详情

    完成了项目的模型层,最需要思考的是数据库该如何设计?这次的电商项目,从用户到下单,都会有哪些操作呢?当看到页面的那些商品信息或是活动促销信息,有考虑过它们之间的联系么?...要是,商品的分类要像某宝或是某东,那样有二级和三级分类,这样又该怎么处理呢?如果每个功能的数据表都单独设计成和用户关联,那功能的不断扩展,会不会影响到整个数据库读写与查询呢?...new_skus = GoodsSKU.objects.filter(category=sku.category).order_by("-create_time")[:2] # 获取其他规格的商品...("history_%s" % user_id, 0, sku_id) # 添加新的浏览记录 redis_conn.lpush("history_%s"...中拿到一个与redis的连接对象 redis_conn = get_redis_connection("default") # 从redis中查询用户的历史记录信息

    66320

    从0开始做系统

    前面已经写了如何做接口,那是方便调用的。现在写个如何做后台系统,是方便操作的。 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。...后台管理可以在各个app的admin.py文件中进行控制。 假如有个小白,想做个后台系统,如何做,他可以直接用Django的admin来弄。...2、CharField ---字符串字段 单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。...模板 raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式 fields,详细页面时,显示字段的字段 exclude,详细页面时,排除的字段 readonly_fields,...详细页面时,只读字段 fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示 详细页面时,M2M显示时,数据移动选择(方向:上下和左右) ordering,列表时,数据排序规则 radio_fields

    1.4K30

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

    如果你想指定一个其他名字的并且具有自动增长的主键,使用AutoField也是可以的。 2....比如作为一个记录修改日期的字段,可以将这个属性设置为True。 auto_now_add:在每次数据第一次被添加进去的时候,都使用当前的时间。...因为Django在处理字符串相关的Field的时候,即使这个Field的null=False,如果你没有给这个Field传递任何值,那么Django也会使用一个空的字符串""来作为默认值存储进去。...第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...因此在底层,Django为Article表添加了一个属性名_id的字段(比如author的字段名称是author_id),这个字段是一个外键,记录着对应的作者的主键。

    4K30
    领券