Python (DJango) - 同时更新多行模型

Posted

技术标签:

【中文标题】Python (DJango) - 同时更新多行模型【英文标题】:Python (DJango) - Update more than one row of a model simultaneously 【发布时间】:2019-12-20 17:35:16 【问题描述】:

我有一个表单/视图,允许用户注册任意数量的语言。现在我正在尝试提取我的登录用户已注册的所有语言,并允许他同时更改每个字段、同一页面、同一视图... 我怎样才能做到这一点?有人有什么想法吗?

例如:

registered rows 
ID User Language
1   A   english
2   A   italian
-->
updated rows
ID User Language
1   A   Portuguese
2   A   Mandarin

我正在尝试这种方式,但我需要通过 id 传递 id:

def MyUpdateView(request, item):
    index = get_object_or_404(MyModel, pk=item)

    temp = MyMode.objects.filter(usuario=request.user).values()

    if request.method == 'GET':
        formset = FormFormset(request.GET or None, prefix='idiomas')

    elif request.method == 'POST':
        formset = FormFormset(request.POST, prefix='idiomas')

        if formset.is_valid():
                for form in formset:
                    language = form.cleaned_data.get('language')
                    level = form.cleaned_data.get('level')
                    if language and level:
                        MyMode.objects.filter(usuario=request.user, id=item).update(language=language, level=level)

    return render(request, 'somepage.html', 
        'formset': formset,
        'temp': temp,
    )

【问题讨论】:

您希望执行什么样的更新操作?除此之外,如果您的表中有更多语言对应单个用户 a 怎么办? 【参考方案1】:

您可以使用两个选项。我正在使用帖子示例。

    用相同的值更新所有标题Post.objects.all().update(title="title")

    用不同的值更新标题

    posts = Post.objects.all()
    for post in posts.iterator():
       # Use your condition to set title
        post.title = "your title"
    # Save all objects in 1 query
    Post.objects.bulk_update(posts, ['title'])
    

【讨论】:

以上是关于Python (DJango) - 同时更新多行模型的主要内容,如果未能解决你的问题,请参考以下文章

鲜为人知的 Python 语法

鲜为人知的 Python 语法

同时更新多行 SQL server

mysql update 如何同时更新多行数据某字段不同的值?

Python之路Day18-正则及Django

Python-pycharm多行代码缩进左移