我有2个模型,在向数据库添加记录期间,我希望在其他模型中更改一个字段
class Room2Create(CreateView):
model = Room2
form_class = Room2Form
template_name = 'room2_form.html'
def form_valid(self, form):
self.object = form.save(commit=False)
q = Room1.objects.filter(id__startswith=self.object.room_status)
q.room_status = self.object.room_status
for elem in q:
elem.save()
self.object.save()
return HttpResponseRedirect(self.get_success_url())
你能帮帮我吗?
有什么问题?
答案 0 :(得分:1)
我不太了解id__startswith
查询,但看起来你在迭代查询集中的Room1实例时没有修改对象。
您也不需要commit=False
,因为您没有在表单save
方法之后更改 Room2 实例。
class Room2Create(CreateView):
model = Room2
form_class = Room2Form
template_name = 'room2_form.html'
def form_valid(self, form):
self.object = form.save()
q = Room1.objects.filter(id__startswith=self.object.room_status)
for elem in q:
elem.room_status = self.object.room_status
elem.save()
return HttpResponseRedirect(self.get_success_url())
如果您的业务逻辑需要在 Room2 保存时更改为 Room1 状态,那么将该逻辑移动到{{}更合适1}} Room2Form 的方法或Room2模型的save
方法,取决于您的需要。