这是事情: 我有两个模型 - 组和存储。我想更新数据。但我的模型组可以更新我的数据,我的模型存储不能。所以我调试我的代码,找到我的存储数据的原因无法更新:功能get_context_data()调用两次。一旦页面加载,表单上的两次。但是函数form_valid不会被调用。 所有相同的代码,但结果不同。有人可以告诉我为什么会这样? 感谢
代码:
class Group(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=100,default='')
info=models.CharField(max_length=100,default='')
class Storage(models.Model):
id=models.AutoField(primary_key=True)
disk_size=models.CharField(max_length=100,default="")
disk_path=models.CharField(max_length=100,default="")
info=models.CharField(max_length=100,default="")
class ManagerStorageUpdateView(LoginRequiredMixin,UpdateView):
model = models.Storage
form_class = forms.StorageCreateUpdateForm
template_name = 'new_update_storage.html'
success_url = reverse_lazy('manager:storage')
def get_context_data(self, **kwargs):
context = super(ManagerStorageUpdateView, self).get_context_data(**kwargs)
hosts = models.Host.objects.all()
storage_hosts = [host.id for host in self.object.hosts.all()]
context.update({
'hosts':hosts,
'storage_hosts':storage_hosts
})
return context
def form_valid(self, form):
host_storage = form.save()
hosts_id_list = self.request.POST.getlist('hosts',[])
hosts = models.Host.objects.filter(id__in=hosts_id_list)
host_storage.hosts.clear()
host_storage.hosts.add(*hosts)
host_storage.save()
return super(ManagerStorageUpdateView,self).form_valid(form)
def get_success_url(self):
return self.success_url
答案 0 :(得分:0)
form_valid()
未被调用的事实意味着您的表单存在一些错误。您可能希望在页面上显示这些内容。
而且很可能这也是它为POST请求调用get_context_data()
的原因。