python - 在 Django 中保存和更新数据
问题描述
我有一个表格。该表单有许多文本字段,这些文本字段包含一些存储在数据库中的数据。这意味着每次打开该表单时,所有字段都有以前的数据。
在表单中,用户可以编辑旧文本字段、创建新文本字段和删除现有文本字段。当表单提交时,表单中的所有数据都会保存到数据库中。截至目前,要将数据保存到数据库中,我首先删除旧数据,然后将新数据保存到数据库中。我知道这种方法不是最优的,因为删除所有数据进行微小更改然后再次保存整个数据没有任何意义。
可能发生的事件
- 用户可能会编辑一些现有字段
- 用户可能会创建一些新字段
- 用户可能会删除一些现有字段
- 用户可能不会进行任何更改并仍然提交表单
那么,我怎样才能有效地处理储蓄呢?
模型
from django.db import models
from django.contrib.auth.models import User
class Sentence(models.Model):
user = models.ForeignKey(User, on_delete = models.CASCADE)
sentence = models.CharField(max_length = 250)
当前解决方案 -
from .models import Sentence
def index(request):
if request.method == "POST" and request.user.is_authenticated:
Sentence.objects.filter(user = request.user).delete() # Deleting all the old data
sentences = request.POST.getlist("sentence")
for sentence in sentences:
s = Sentence(
user = request.user,
sentence = sentence
)
s.save() # Saving data
# Some more code
解决方案
我不确定完全理解删除部分,但如果你想从 0 重新开始并创建新句子,这是我看到的唯一解决方案。bulk_create
但是,对于创建部分,使用( doc )有一个更有效的解决方案:
def index(request):
if request.method == "POST" and request.user.is_authenticated:
Sentence.objects.filter(user = request.user).delete() # Deleting all the old data
sentences = request.POST.getlist("sentence")
sentences = list(map(
lambda x: Sentence(user=request.user, sentence=x),
sentences
))
Sentence.objects.bulk_create(sentences)
# the rest of your code...
优点是bulk_create
只会访问数据库一次。在执行数据库操作时在 Django 中进行迭代真的很不常见。
推荐阅读
- sql - 截断不正确的整数值“。”
- python - 如何向 rest api 端点发出 post 请求,并请求将我的表单保存在 django 的视图文件中?
- c++ - 在 boost/beast 中获取请求协议
- python - 如何在网站的python django中的文章中放置标签
- botframework - 如何从 Microsoft Bot Service 获取所有 Carousel 数据?
- javascript - 翻译js构造(对象)
- php - 在 Woocommerce 中保存自定义属性字段
- java - 如何使用 *class 文件生成 .jar 的 android 库?
- javascript - Flask/html - 在 Enter 键上只提交一个按钮
- python - plt.subplot 制作空图