2017-08-08 142 views
0

这里是事情: 我有两个模型 - 组和存储。我想更新数据。但我的模型组可以更新我的数据,我的模型存储can't.So调试我的代码,并找出为什么我的存储数据无法更新的原因:)上的页面加载叫twice.Once的funtion get_context_data(,两次形式post.But功能form_valid不叫。 所有相同的代码,但不同result.Someone能告诉我为什么发生这种情况 感谢Django UpdateView get_context_data函数调用两次

代码:

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

form_valid()不叫,这意味着你的形式其实有一些错误。您可能想要在页面上显示这些内容。 而最有可能的,这是它的调用get_context_data()对POST请求和理由。

+0

Thanks.I重新编写该Storage.Always的更新视图相同的代码,并将其与我form_valid()。Tab键或空格或什么work.Maybe一些问题。 – YoLoveLife