如何通过objects.create创建含多对多字段的Django Showtimes模型对象?
解决方案
Django的ManyToManyField不能在objects.create()中直接传入查询集赋值,必须分两步操作:先创建Showtimes实例,再关联多对多关系的对象。
正确步骤:
- 创建基础的Showtimes实例:只传入外键字段(
theater和movie),create方法会自动保存实例,无需额外调用.save()。 - 关联多对多字段:通过实例的多对多字段调用
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
相关产品推荐
相关产品推荐

