我已使用此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错了吗?
感谢您的帮助!
答案 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)
它将起作用。