Django CeateView并在其他模型中更改recodrs

时间:2017-06-23 12:33:47

标签: django django-models django-forms django-views

我有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())
你能帮帮我吗? 有什么问题?

1 个答案:

答案 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方法,取决于您的需要。