You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过objects.create创建含多对多字段的Django Showtimes模型对象?

解决方案

Django的ManyToManyField不能在objects.create()中直接传入查询集赋值,必须分两步操作:先创建Showtimes实例,再关联多对多关系的对象。

正确步骤:

  1. 创建基础的Showtimes实例:只传入外键字段(theater和movie),create方法会自动保存实例,无需额外调用.save()。
  2. 关联多对多字段:通过实例的多对多字段调用add()或set()方法,批量添加关联的Date和Time对象。

示例代码:

# 第一步:创建Showtimes实例
showtime = Showtimes.objects.create(theater=th, movie=m)

# 第二步:关联所有日期和时间
# 方法1:使用add(),需要用*解包查询集
showtime.show_date.add(*Date.objects.all())
showtime.show_time.add(*Time.objects.all())

# 方法2:使用set(),可直接传入查询集
showtime.show_date.set(Date.objects.all())
showtime.show_time.set(Time.objects.all())

补充说明:

  • add()方法支持传入单个对象、多个对象或解包后的查询集;
  • set()方法会替换当前的关联关系,直接设置为传入的所有对象,适合一次性批量关联;
  • 原代码中.save()是多余的,objects.create()已经完成了保存操作。

内容的提问来源于stack exchange,提问作者Lalit Rajpurohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:52:07