Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django编写通用更新视图_Django_Class_View_Updates - Fatal编程技术网

Django编写通用更新视图

Django编写通用更新视图,django,class,view,updates,Django,Class,View,Updates,我正在尝试为我的需要编写一个通用的更新视图。 我的视图应该更新不同模型中具有相同名称的字段。 检查用户是否有权限,类似于@permission\u required decorator。 应该在一个对象上工作。 用于ajax请求-意味着我需要返回代码/json。 我没有使用django内置的表单,而是自己编写的。 由于这些原因,我无法使用django内置的UpdateView。 我想扩展SingleObjectMixin。我被困在应该把模型保存到数据库的地方 class MyUpdateView

我正在尝试为我的需要编写一个通用的更新视图。 我的视图应该更新不同模型中具有相同名称的字段。 检查用户是否有权限,类似于@permission\u required decorator。 应该在一个对象上工作。 用于ajax请求-意味着我需要返回代码/json。 我没有使用django内置的表单,而是自己编写的。 由于这些原因,我无法使用django内置的UpdateView。 我想扩展SingleObjectMixin。我被困在应该把模型保存到数据库的地方

class MyUpdateView(generic.UpdateView):
   ...

   def form_valid(self,form):
     # ... do something here ...
     obj = form.save()
     obj1 = AnotherModel.objects.get(...)
     obj1.the_field = obj.the_field
     obj1.save()
     obj2 = YetAnotherModel.objects.get(...)
     obj2.the_field = obj.the_field
     obj2.save()
     return super(MyUpdateView,self).form_valid()
或者,您可以在表单保存方法中实现它:

class MyForm(forms.ModelForm):

   def save(self):

      obj = super(MyForm,self).save()
      # ... save to other models
      return obj
在你看来:

if form.is_valid():
    obj = form.save()

这可能很好。但正如我所说,我不使用django内置表单。所以我不能扩展updateview类。如果你只是添加一些保存行为,扩展是最简单的方法。但这实际上取决于您,您必须在“form.is_valid()”之后使用“form.save()”保存表单。额外的保存代码可以在视图中运行,也可以在表单保存方法中运行。CBV会帮你处理的。更新了答案。我根本没有任何modelform/form类。我用html手动编写表单。因此,我想有效的方法是行不通的。问题是我是否仍然可以使用updateview或创建类似的东西,以及实现form.save()自己所做的事情。我不确定应该扩展哪些类。我认为您在django核心体系结构中遗漏了一些东西。表单是处理HTML和用户输入的python类。当然,您可以自己编写表单,但为什么呢?我知道可以将表单编写为python类。但出于某些原因,我选择不这样做——我的表单包含一些繁重的javascript,当表单与py文件分离时,很难维护这些javascript。我不喜欢这样,我必须在javascript代码中引用的form类中编写“id”属性。