Использование формы django-tables2 для отправки выбора в другую форму - ничего не спасает? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть форма django-tables2, которая передает выбранные элементы модели во вторую форму. Цель второй формы - позволить пользователю редактировать значения, которые будут применены ко всем элементам. Моя проблема в том, что вторая форма не проходит проверку, а затем входные значения не сохраняются. Как я могу связать эти две формы и разрешить ввод данных пользователем, прежде чем форма попытается проверить? Похоже, что запрос POST идет из таблицы через вторую форму - есть ли способ прервать его или запустить второй запрос?

image_list.html :

<form method="post" action="{% url 'ExifReader:delete_image_list' %}">
  {% render_table table %}
  {% csrf_token %}
  <button type="submit" style="margin-right:10px" class="btn btn-primary" name="edit_FAN">Edit Exif</button>
  <button type="submit" style="margin-right:10px" class="btn btn-danger" onclick="return confirm('Delete?')" name="delete_images">Delete Images</button>
</form>

Примечание: кнопка delete_images работает нормально.

views.py :

def delete_image_list(request):
    if request.method == 'POST':
        if 'delete_images' in request.POST:
            pks = request.POST.getlist('selection')
            # Delete items...

        elif 'edit_FAN' in request.POST:
            form = EditFANForm()
            pks = request.POST.getlist('selection')
            imgs = []
            for pk in pks:
                ex = exif.objects.get(pk=pk)
                imgs.append(ex.image_id)
            if request.method == 'POST':
                print('POST')
                for img in imgs:
                    print(image.objects.get(pk=img))
                    form = EditFANForm(instance=image.objects.get(pk=img))
                    if form.is_valid():
                        print('Valid')
                        formS = form.save(commit=False)
                        img.FAN = formS.FAN
                        fromS.save()
                    else:
                        print('ERRORS: ', form.errors)
            return render(request, 'ExifReader/edit_fan_form.html', {'form': form, 'pks':pks})

Когда я нажимаю кнопку "edit_FAN" изВ табличном представлении EditFANForm отображается правильно, я могу вводить значения, перенаправляться обратно в табличное представление, но ни одно из значений не сохраняется. Из команд print, которые я добавил для отслеживания кода, я получаю в консоли следующее:

POST
774
ERRORS:   <bound method BaseForm.non_field_errors of <EditFANForm bound=False, valid=False, fields=(FAN;collection;tags)>>

Где «774» - выбранный объект.
Так что мне кажется, что форма получаетв части, где значения могут быть отредактированы (EditFANForm), но форма POSTs перед тем, как пользователь может ввести значения, следовательно, форма не проверяется (но также нет ошибок?).

Куда я иду не так? Как сохранить значения из второй формы?

Python 3.6.8, Django 2.2.6

1 Ответ

0 голосов
/ 14 ноября 2019

Я нашел решение, которое, кажется, работает нормально: добавьте перенаправление в другое представление для обработки второй формы. Сообщения от django.contrib используются для передачи контекстных данных во второе представление и форму (в данном случае выбранные объекты из таблицы).

from django.contrib import messages

def delete_image_list(request):
    ...
    elif 'edit_FAN' in request.POST:
        pks = request.POST.getlist('selection')
        messages.add_message(request, messages.INFO, pks)
        return HttpResonseRedirect(reverse('ExifReader:images_list_edit'))

def images_list_edit(request):
    if request.method == 'POST':
    ...

...