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
相关产品推荐
相关产品推荐

