Я хочу обновить группу объектов модели, но это не работает - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь назначить их пользователям и использую форму для той же модели, чтобы обновить ее, но по какой-то причине это не работает, это код

def assign_blanks(request):
    if request.method == 'POST':
        form = assign_blank_form(data=request.POST)
        from_value = request.POST.get("from_value", "")
        to_value = request.POST.get("to_value", "")
        blanks = blank.objects.all()
        for b in blanks:
            if b.number >= int(from_value) and b.number >= int(to_value):
                b.advisor = form.instance.advisor
                print(b.number)
        return render(request, 'assign_blanks.html')
    else:
        form = assign_blank_form
        return render(request, 'assign_blanks.html', {'form':form})

class assign_blank_form(ModelForm):
    class Meta:
        model = blank
        fields = ['advisor']


<form class="box" method = "post">
    {% csrf_token %}
    <h1>Air Ticket Sales</h1>
    {{ form }}
    assign from:
    <input type="number" name="from_value" value="{{ from_value }}">
    assign to:
    <input type="number" name="to_value" value="{{ to_value }}">
    <input type="submit" name="" value="Assign blanks">

</form>

1 Ответ

0 голосов
/ 13 февраля 2020

Вы не вызываете метод save() после присвоения advisor. Измените ваше представление на:

def assign_blanks(request):
    if request.method == 'POST':
        form = assign_blank_form(data=request.POST)
        from_value = request.POST.get("from_value", "")
        to_value = request.POST.get("to_value", "")
        blanks = blank.objects.all()
        for b in blanks:
            if b.number >= int(from_value) and b.number >= int(to_value):
                b.advisor = form.instance.advisor
                <b>b.save()</b> # call save method.
                print(b.number)
        return render(request, 'assign_blanks.html')
    else:
        form = <b>assign_blank_form()</b> # instantiate a form for GET request.
        return render(request, 'assign_blanks.html', {'form':form})

Также вам нужно создать экземпляр формы для запроса GET. Вы пропускаете () после имени вашей формы assign_blank_form.

Вы можете дополнительно оптимизировать производительность, избегая многократного вызова save(). Создайте список b.id в вашем if состоянии и затем используйте метод update(). Это обновит несколько записей в одном запросе. Добавление этого фрагмента кода здесь.

blanks = blank.objects.all()
b_ids = []
for b in blanks:
    if b.number >= int(from_value) and b.number >= int(to_value):
        b_ids.append(b.id)
<b>blank.objects.filter(id__in=b_ids).update(advisor=form.instance.advisor)</b>
return render(request, 'assign_blanks.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...