首次保存时“模型”字段未更新

时间:2019-01-10 12:54:24

标签: python django

我已使用此UpdateView更新我的频道:

class ChannelUpdate(UpdateView, ProgramContextMixin):
    model = ChannelCategory
    form_class = ChannelForm
    template_name = 'app/templates/channel/form.html'

    def dispatch(self, request, *args, **kwargs):
        return super(ChannelUpdate, self).dispatch(request, *args, **kwargs)

    def get_success_url(self):
        return reverse('channel_index', args=[self.get_program_id()])

    def get_context_data(self, **kwargs):
        context = super(ChannelUpdate, self).get_context_data(**kwargs)
        context.update({
            'is_new': False,
        })
        return context

    def form_valid(self, form):
        channel = Channel.objects.get(id=self.kwargs['pk'])
        channel_codes = ChannelCodes.objects.filter(channel_id=channel.pk)

        if 'is_channel_enabled' in form.changed_data:
            for channel_code in channel_codes:
                channel_code.is_active = channel.is_channel_enabled
                channel_code.save()
        return super(ChannelUpdate, self).form_valid(form)

因此,当我编辑频道时,我有一个复选框,它将我的模型字段is_channel_enabled的bool值更改为True或False。如果这样做,我将在def form_valid方法中触发我的if语句,该方法然后循环遍历所有channel_codes并将其bool字段is_active设置为与bool字段is_channel_enabled相同的值我的频道。

但是我现在的问题是:假设我取消选中该框,并且保存表单后,即使我未选中该框,布尔值仍为True,但应该为False,但是如果我再次编辑我的频道并选中该框,布尔值将更改为False,以便每次我选中该框时,都会出现完全相反的情况:框选中= False,框未选中= True。

但这也仅在我执行更新时发生。如果创建通道,则True的默认值是正确的,只有当我开始对其进行编辑时,才会保存错误的值。有人知道我的问题在哪里吗?我使用form_valid错了吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您没有更新最新值。 您可以更改如下所示的表单有效方法

def form_valid(self, form):
    # channel = Channel.objects.get(id=self.kwargs['pk'])
    channel_codes = ChannelCodes.objects.filter(channel_id=self.kwargs['pk'])

    if 'is_channel_enabled' in form.changed_data:
        for channel_code in channel_codes:
            channel_code.is_active = form.cleaned_data.get('is_channel_enabled')
            channel_code.save()
    return super(ChannelUpdate, self).form_valid(form)

它将起作用。