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

Django创建单个对象却生成两个实例的问题求助

解决Django中创建模型对象时生成重复实例的问题

你当前代码的问题出在Room.objects.create(topic=topic)这一行——这行代码会直接在数据库里创建一个Room实例,之后通过form修改并保存时,又会生成一条新的记录,所以最终出现两个对象。

修正方案分两种场景选择:


场景1:仅需给表单预填充topic字段(推荐新建对象时用)

不需要提前创建Room实例,直接给表单设置初始值即可:

topic = Topic.objects.get(id=pk)
if request.method == 'POST':
    form = RoomForm(request.POST)
    if form.is_valid():
        room = form.save(commit=False)
        room.host = request.user
        room.topic = topic  # 绑定topic
        room.save()
        return redirect('home')
else:
    # GET请求时给表单设置默认的topic值
    form = RoomForm(initial={'topic': topic})

场景2:需要基于未保存的实例填充多个字段

如果要预填充多个字段,不要用create()(会直接存数据库),而是创建未保存的Room实例:

topic = Topic.objects.get(id=pk)
# 创建未保存的Room实例,不会写入数据库
room = Room(topic=topic)
if request.method == 'POST':
    form = RoomForm(request.POST, instance=room)
    if form.is_valid():
        room = form.save(commit=False)
        room.host = request.user
        room.save()
        return redirect('home')
else:
    form = RoomForm(instance=room)

两种方案都只会在room.save()时生成一条数据库记录,不会出现重复对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:10:59