django 有没有内置用字典更新模型的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 有没有内置用字典更新模型的方法相关的知识,希望对你有一定的参考价值。

from django.db import models class Document(models.Model): name = models.CharField(max_length=255) format = models.ForeignKey('Format') class Comment(models.Model): document = models.ForeignKey(Document, related_name='comments'... 参考技术A for k,v in dict:
其中k是字典的key,v是字典的value。
或者
for k in dict :
v = dict[k]
k是字典的key,v是字典的value。

Django编写通用更新视图

【中文标题】Django编写通用更新视图【英文标题】:Django writing generic update view 【发布时间】:2016-02-07 07:37:54 【问题描述】:

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

【问题讨论】:

【参考方案1】:
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 中手动编码表单。所以我猜 form_valid 方法行不通。问题是我是否仍然可以使用 updateview 或创建类似的东西,并自己实现 form.save() 所做的事情。我不确定我应该扩展哪些类。 我认为你错过了 django 核心架构中的一些东西。表单是处理 HTML 和用户输入的 Python 类。当然,你可以自己写,但为什么呢? 我知道可以将表单编写为 python 类。但出于某些原因,我选择不这样做——我的表单包含一些繁重的 javascript,当表单是单独的 py 文件时,这些 javascript 很难维护。我不喜欢我必须在我在 javascript 代码中引用的表单类中编写“id”属性。

以上是关于django 有没有内置用字典更新模型的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模型上存储字典?

Django编写通用更新视图

使用 Form 标签在 Django 模板中获取模型的名称

Django模型操作常用方法

如何通过简单地单击没有任何形式的按钮来更新 django 模型的数据?

如何自省 Django 中的属性和模型字段?