Gustavo Lisi
Gustavo Lisi

Reputation: 141

Python (DJango) - Update more than one row of a model simultaneously

I have a form / view that allows the user to register as many languages ​​as he wants. Now I am trying to extract all languages ​​that my logged in user has registered and allow him to change each of the fields at the same time, same page, same view ... How can I do this? Does anyone have any ideas?

For exemple:

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

I was trying this way, but I need to pass id by 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,
    })

Upvotes: 0

Views: 134

Answers (1)

Arsh Doda
Arsh Doda

Reputation: 334

You can use two options. I am using the posts example.

  1. update all title with same value Post.objects.all().update(title="title")

  2. update title with different values

    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'])
    

Upvotes: 1

Related Questions